2013-09-26 151 views
2

使用MySQL 31年5月5日MySQL的預處理語句錯誤

請參見下面的SQL:從MySQL

set @auto_table = 'MyTableName'; 
PREPARE stmt FROM 'ALTER TABLE `?` AUTO_INCREMENT = 1'; 
EXECUTE stmt USING @auto_table; 

錯誤消息:

Incorrect arguments to EXECUTE 

我曾嘗試2號線更改爲成爲:

PREPARE stmt FROM 'ALTER TABLE ? AUTO_INCREMENT = 1'; 

然後t他的錯誤消息是:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? AUTO_INCREMENT = 1' at line 1 
+0

佔位符只能用於允許使用表達式的位置,而不能使用表或列名稱。 – Barmar

回答

4

試試這個,

PREPARE stmt FROM 'ALTER TABLE ' + @auto_table + ' AUTO_INCREMENT = 1'; 
EXECUTE stmt 

只要留意SQL注入。如果@auto_table來自用戶,這將不安全。

+0

不是我正在尋找的答案,因爲我想使用像這樣的變量'執行stmt使用@auto_table;'和你的答案迫使我每次重新準備語句。如果在接下來的幾天內沒有人提出更好的解決方案,我會給你答案。 –

+0

@MichaelIrey查看文檔:http://dev.mysql.com/doc/refman/5.0/en/prepare.html參數標記只能用於出現數據值的位置,而不能用於SQL關鍵字,標識符和等等。 – Vulcronos

-1

我認爲你的錯誤就出在這裏:

PREPARE stmt FROM 'ALTER TABLE `?` AUTO_INCREMENT = 1'; 

缺少`1

PREPARE stmt FROM 'ALTER TABLE `?` AUTO_INCREMENT = `1`'; 

希望這有助於之前。

+0

爲什麼你需要'1'附近的引號?這是一個整數。 – Barmar

+0

我無法正確解釋,但這是我學習PHP/MySQL的方式,用引號括住字符串/整數。 – RobAtStackOverflow

+0

您可以用引號括住整數,因爲在必要時該字符串將被強制轉換。但你從來不需要這麼做。 – Barmar