【问题标题】:MySQL variables (USE STATEMENT)MySQL 变量(使用语句)
【发布时间】:2014-01-17 18:29:23
【问题描述】:

我已经设置了 MySQL 变量:

SET @test = 'my_db';
select @test; 

然后

use  @test
ERROR 1049 (42000): Unknown database '@test'

mysql> SET @test = 'my_db';
Query OK, 0 rows affected (0.00 sec)

mysql> select @test;
+-------+
| @test |
+-------+
| my_db   |
+-------+
1 row in set (0.00 sec)

mysql> use @test
ERROR 1049 (42000): Unknown database '@test'

如何在 MySQL 中通过 use USE STATEMENT 使用变量值?

【问题讨论】:

    标签: php mysql database linux


    【解决方案1】:

    变量不能用作 MySQL 中的标识符。您正在寻找 MySQL 不支持的宏扩展。

    用户变量旨在提供数据值。它们不能直接在 SQL 语句中用作标识符或标识符的一部分,例如在需要表或数据库名称的上下文中,或作为保留字(如 SELECT)

    来自http://dev.mysql.com/doc/refman/5.6/en/user-variables.html

    可以通过使用准备好的语句为SELECT 等某些语句解决此问题,但您不能准备USE 语句,因此在这种情况下不适合您.

    您必须通过使用mysqli_select_db($test) 或通过执行诸如mysqli_query("USE $test"); 之类的查询来选择应用程序代码中的数据库

    【讨论】:

    • 当然,但是您只是将问题推到了一步,因为您也不能在存储过程中执行USE @test。在纯 MySQL 中最接近的方法是执行CONCAT('SELECT * FROM ', @test, '.tablename') 之类的操作,然后准备该语句。您需要对需要引用数据库的每个语句执行此操作,并处理不使用 USE 带来的日志记录和复制问题。
    猜你喜欢
    • 2015-01-27
    • 2015-03-02
    • 1970-01-01
    • 2015-12-16
    • 2016-09-21
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多