Heim >Backend-Entwicklung >PHP-Tutorial >Warum erhalte ich „SQLSTATE[HY093]: Ungültige Parameternummer' in meiner vorbereiteten Mehrfach-INSERT-Abfrage?

Warum erhalte ich „SQLSTATE[HY093]: Ungültige Parameternummer' in meiner vorbereiteten Mehrfach-INSERT-Abfrage?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-09 00:25:10933Durchsuche

Why Am I Getting

Fehler beim Beheben von „SQLSTATE[HY093]: Ungültige Parameternummer“ in der vorbereiteten Mehrfacheinfügungsabfrage

Beim Versuch, eine Mehrfacheinfügungsabfrage auszuführen, Es kann ein Fehler mit der Meldung „SQLSTATE[HY093]: Ungültige Parameternummer: Parameter wurde nicht definiert“ auftreten. Obwohl übereinstimmende Zählwerte für das Parameterarray und die Eingabedatenelemente vorhanden sind, bleibt dieser Fehler bestehen.

Verstehen des Fehlers

Dieser Fehler entsteht aufgrund einer Nichtübereinstimmung zwischen der Anzahl von Elemente im Parameterarray ($values) und die Eingabedaten ($matches). Beim Ausführen einer vorbereiteten Anweisung erwartet die Abfrage eine bestimmte Anzahl von Parametern und jede Diskrepanz führt zu diesem Fehler.

Problem lösen

Um dieses Problem zu beheben, Stellen Sie sicher, dass $values ​​initialisiert ist, bevor Sie in die Schleife eintreten, die die Parameter generiert. Dadurch wird verhindert, dass bereits vorhandene Werte die Zählung beeinflussen. Darüber hinaus wird die Überprüfung des Vorhandenseins eines eindeutigen Index für die „Hash“-Spalte in der Datenbank potenzielle Konflikte weiter verhindern.

Überarbeiteter Code

Hier ist der überarbeitete Code: Einbeziehung dieser Überarbeitungen:

$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 erhalte ich „SQLSTATE[HY093]: Ungültige Parameternummer' in meiner vorbereiteten Mehrfach-INSERT-Abfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn