Beim Versuch, eine Mehrfacheinfügungsabfrage auszuführen, kann ein Fehler wie „SQLSTATE[HY093]: Ungültiger Parameter“ auftreten Nummer: Parameter wurde nicht definiert". Dieser Fehler tritt auf, wenn die Anzahl der Platzhalterwerte (?) in der Abfrage nicht mit der Anzahl der übergebenen Parameter übereinstimmt.
Betrachten Sie das folgende Codebeispiel:
// BUILD VALUES $count = count($matches); for($i = 0; $i < $count; ++$i) { $values[] = '(?)'; } // INSERT INTO DATABASE $q = $this->dbc->prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash"); $q->execute($matches);
In diesem Szenario , könnten Sie verwirrt sein, weil count($matches) gleich count($values) ist, kurz bevor „execute“ aufgerufen wird. Der Fehler bleibt jedoch bestehen.
Grundlegendes Problem:
Das zugrunde liegende Problem tritt auf, wenn $values mit vorhandenen Werten initialisiert wird, bevor es mit Platzhalterwerten gefüllt wird. Infolgedessen kommt es zu einer Nichtübereinstimmung der Anzahl.
Lösung:
Um diesen Fehler zu beheben, stellen Sie sicher, dass Sie ein leeres Array für $values initialisieren, bevor Sie es innerhalb der Schleife füllen. Dadurch wird gewährleistet, dass die Anzahl der Platzhalterwerte mit der Anzahl der eingefügten Datenpunkte übereinstimmt.
Zusätzliche Überlegungen:
Überarbeitetes Codebeispiel:
$matches = array('1'); $count = count($matches); $values = []; for($i = 0; $i < $count; ++$i) { $values[] = '(?)'; } // INSERT INTO DATABASE $sql = "INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash=values(hash)"; $stmt = $dbh->prepare($sql); $data = $stmt->execute($matches);
Das obige ist der detaillierte Inhalt vonWarum schlägt meine Mehrfacheinfügungsabfrage mit „SQLSTATE[HY093]: Ungültige Parameternummer' fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!