2017-08-13 81 views
1

我有一個MySQL表,看起來像這樣預處理語句和AUTO_INCREMENT錯誤

| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| first_name | varchar(256) | NO |  | NULL |    | 
| last_name | varchar(256) | NO |  | NULL |    | 
| email  | varchar(256) | NO |  | NULL |    | 
| username | varchar(256) | NO |  | NULL |    | 
| password | varchar(256) | NO |  | NULL |    | 

我試圖用準備好的發言我的登記制度:

$sql = $connection->prepare("INSERT INTO users VALUES(?,?,?,?,?)"); 
$sql->bind_param('sssss', $first, $last, $email, $username, $pwd); 
$sql->execute(); 

但我得到這個錯誤: 致命錯誤:未捕獲錯誤:調用布爾上的成員函數bind_param()。

我刪除了'id'列,現在它工作正常。

如何在我的表中使用'id'列的預處理語句?

回答

5

試試這個:

$sql = $connection->prepare("INSERT INTO users (first_name, last_name, email, username, password) VALUES(?,?,?,?,?)");

如果添加id列回你的表這應該甚至不工作。它也應該沒有它。

由於第一列將被忽略,因此您必須指定要插入的列。第一列不會因爲您稱之爲id而被忽略,或者僅僅因爲它是auto_increment。 SQL會按照你的要求去做,它只是假定你給它的第一個參數應該放在表的第一列。

很多時候,查詢的寫法與上面一樣,包括表名,以便在某些人出於某種原因修改表的情況下某些內容不會中斷。當然,你不應該在生產環境中隨意修改任何方式,但你明白了。

請記住,需要按照您計劃插入列的順序指定列。