Fehlerbehandlung: „Ungültige Parameternummer“ in Mehrfacheinfügungsabfrage
Beim Versuch, eine Mehrfacheinfügungsabfrage durchzuführen, ist es wichtig, dies sicherzustellen Die Anzahl der Parameterwerte entspricht der Anzahl der Platzhalter in der Abfrage selbst. Im folgenden Code tritt jedoch der Fehler „SQLSTATE[HY093]: Ungültige Parameternummer: Parameter wurde nicht definiert“ auf, obwohl kurz vor der Ausführung der Abfrage bestätigt wurde, dass count($matches) und count($values) gleich sind.
// 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);
Die Diskrepanz zwischen dem Code und der Fehlermeldung ist auf ein potenzielles Problem bei der Initialisierung des $values-Arrays zurückzuführen. Es ist wahrscheinlich, dass $values bereits einige Daten enthält, was zu einer Nichtübereinstimmung der Anzahl führt. Um dies zu verhindern, ist es wichtig, Arrays immer vor der Schleife zu initialisieren.
Um das Problem zu beheben, berücksichtigen Sie den folgenden geänderten Code:
$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);
Zusätzlich, um die Meldung „Ungültige Parameternummer“ zu vermeiden. Wenn bei mehreren Einfügeabfragen ein Fehler auftritt, stellen Sie sicher, dass für die Spalte, die für doppelte Schlüsselaktualisierungen verwendet wird (in diesem Fall Hash), ein eindeutiger Index definiert ist. Andernfalls kann es zu unerwartetem Verhalten und möglichen Fehlern kommen.
Das obige ist der detaillierte Inhalt vonWarum gibt meine Mehrfacheinfügungsabfrage trotz übereinstimmender Parameteranzahlen den Fehler „Ungültige Parameternummer' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!