準備語句插入中綁定變數的數量不符
使用MySQLi準備語句執行INSERT語句時,使用者可能會遇到錯誤:「綁定變數的數量與準備好的語句中的欄位數量不符。」
當bind_param()方法中提供的綁定變數的數量與INSERT查詢中的佔位符的數量不一致時,就會出現此問題。例如,考慮下面的程式碼片段:
if($stmt = $conn->prepare("INSERT INTO login(user, pass) VALUES(?, ?)")) { /* Bind parameters s - string, b - blob, i - int, etc */ $stmt->bind_param("ss", $user, $pw); /* Execute it */ $stmt->execute(); /* Bind results */ $stmt->bind_result($user, $pw); /* Close statement */ $stmt->close(); $userId = $conn->insert_id; }
在此程式碼中,INSERT 語句有兩個佔位符 (?):一個用於用戶,一個用於通行證。但是,bind_param() 方法將兩個變數($user、$pw)綁定到佔位符。這會導致不匹配錯誤。
解決方案是刪除 bind_result() 方法調用,因為 INSERT 語句不會傳回任何結果。下面更新的程式碼正確地將資料插入表中:
if($stmt = $conn->prepare("INSERT INTO login(user, pass) VALUES(?, ?)")) { /* Bind parameters s - string, b - blob, i - int, etc */ $stmt->bind_param("ss", $user, $pw); /* Execute it */ $stmt->execute(); /* Close statement */ $stmt->close(); $userId = $conn->insert_id; }
以上是為什麼我在 MySQLi 準備好的語句中收到「綁定變數數量不符」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!