2014-01-17 92 views
0

我已经设置MySQL的变量:的MySQL变量(USE语句)

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

然后

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

OR

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中使用的变量值与使用用途声明?

回答

2

变量不能用作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");

+0

谢谢你选择在应用程序代码的数据库!为你的时间! –

+0

我可以通过调用my_proc“调用updater_db(@test)”来使用它吗? –

+0

当然,但你只是将问题推出一步,因为你不能在存储过程中执行'USE @ test'。在纯MySQL中最接近的是做类似'CONCAT('SELECT * FROM',@test,'.tablename')',然后准备这个语句。您需要为需要引用数据库的每条语句执行此操作,并处理不使用“USE”时出现的日志记录和复制问题。 –