2011-05-17 75 views
0

我正在尝试在MySQL中创建一个准备好的语句,该语句只需要一个参数。当我在命令行尝试这个时,我得到一个语法错误。但是,当我准备好的声明中没有变量时,我可以创建它们。下面是我在MySQL命令提示符处看到的内容的复制和粘贴:无法在MySQL中创建准备好的语句

mysql> PREPARE state_name FROM "select * from ? limit 1"; 

错误1064(42000):您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在''附近使用正确的语法'?在1号线

mysql> PREPARE state_name FROM "select * from documents limit 1"; 
 
Query OK, 0 rows affected (0.00 sec) 
Statement prepared 

限制1' 的MySQL我使用的版本是5.0.77日志。

有没有我没有看到的语法错误?是否有任何配置参数,我必须设置为了准备好的语句工作?

回答

5

您不能将表名作为准备好的语句参数传递,恐怕您也不能传递列进行分组或排序。您可以参数化的唯一的事情是在条款或更新字段:

PREPARE state_name FROM "select * from documents where id = ?"; 

PREPARE state_name FROM "update documents set field = ? where id = ?"; 
+0

啊,很高兴知道,谢谢! – patorjk 2011-05-17 12:22:58

1

如果你想创建一个单一的准备语句来为多个表,你C和实际为每个表创建一个变量,然后用这个变量创建语句,就像MySQL manual解释一下:

mysql> USE test; 
mysql> CREATE TABLE t1 (a INT NOT NULL); 
mysql> INSERT INTO t1 VALUES (4), (8), (11), (32), (80); 

mysql> SET @table = 't1'; 
mysql> SET @s = CONCAT('SELECT * FROM ', @table); 

mysql> PREPARE stmt3 FROM @s; 
mysql> EXECUTE stmt3; 
+----+ 
| a | 
+----+ 
| 4 | 
| 8 | 
| 11 | 
| 32 | 
| 80 | 
+----+ 

mysql> DEALLOCATE PREPARE stmt3;