2011-05-17 57 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;