準備語句插入中綁定變數的數量不符
使用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; }
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3