Anzahl der Bind-Variablen stimmen beim Einfügen vorbereiteter Anweisungen nicht überein
Beim Ausführen einer INSERT-Anweisung mit MySQLi-vorbereiteten Anweisungen kann es sein, dass Benutzer auf den Fehler stoßen: „ Die Anzahl der Bindevariablen stimmt nicht mit der Anzahl der Felder in der vorbereiteten Anweisung überein.“
Dieses Problem tritt auf, wenn die Anzahl der in der bind_param()-Methode bereitgestellten Bindevariablen nicht mit der Anzahl der Platzhalter in der INSERT-Abfrage übereinstimmt . Betrachten Sie zum Beispiel den folgenden Codeausschnitt:
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; }
In diesem Code hat die INSERT-Anweisung zwei Platzhalter (?): einen für den Benutzer und einen für den Pass. Allerdings bindet die Methode bind_param() zwei Variablen ($user, $pw) an die Platzhalter. Dies führt zu einem Nichtübereinstimmungsfehler.
Die Lösung besteht darin, den Methodenaufruf bind_result() zu entfernen, da die INSERT-Anweisung keine Ergebnisse zurückgibt. Der aktualisierte Code unten fügt Daten korrekt in die Tabelle ein:
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; }
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in MySQLi-vorbereiteten Anweisungen die Fehlermeldung „Anzahl der Bind-Variablen stimmen nicht überein'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!