2016-11-21 76 views
0

我在我的PHP和MySQL項目中使用過PDO。一切工作正常,但我執行下面的代碼時出現錯誤:用PDO修改MySQL表並準備語句

$sql = "ALTER TABLE tbl_invoices AUTO_INCREMENT = ?"; 
$q = $db->prepare($sql); 
$q->execute(array($invoice_start)); 

我想改變PDO準備語句表。但我得到這個錯誤:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 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 '?' at line ...

我測試了不同的解決方案,但沒有一個解決不了它。你有什麼主意嗎?

+0

你不能以這種方式綁定 –

+0

不能爲所有的alter命令做到這一點? –

回答

2

ALTER TABLE tbl_invoices AUTO_INCREMENT = ?

這就是你在做什麼錯瘦的第一名。

從來沒有。永遠。觸摸。自動增量。

你把它作爲一個號的任何時間,這意味着在數據庫設計嚴重缺陷。

雖然關於改變表的一般情況 - 是的,大部分時間你不能綁定。

+1

由於我們應該「永遠不會觸摸自動增量」,使用AI字段進行排序是否可怕?這一行之前插入了E.G這一行嗎? – bassxzero

+0

1)'ON DUPLICATE KEY UPDATE'會在記錄存在時擴大自動遞增值。防止在自動增量中創建大間隙的功能可能很好。 2)MySQL和MariaDB阻止您將其設置爲低於最大值的值。 3)如果你想確保沒有低於特定值的值被創建(例如,如果你想稍後導入你知道有最大ID的數據),設置AUTO_INCREMENT ID也很有用。 –