」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼我在 MySQLi 準備好的語句中收到「綁定變數數量不符」錯誤?

為什麼我在 MySQLi 準備好的語句中收到「綁定變數數量不符」錯誤?

發佈於2024-10-31
瀏覽:971

Why Am I Getting \

準備語句插入中綁定變數的數量不符

使用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