Heim >Backend-Entwicklung >PHP-Tutorial >Warum schlägt meine Mehrfach-SQL-INSERT-Abfrage mit „SQLSTATE[HY093]: Ungültige Parameternummer' fehl?

Warum schlägt meine Mehrfach-SQL-INSERT-Abfrage mit „SQLSTATE[HY093]: Ungültige Parameternummer' fehl?

Barbara Streisand
Barbara StreisandOriginal
2024-12-06 10:13:12463Durchsuche

Why Does My Multiple SQL INSERT Query Fail with

Unerwarteter Fehler bei der Mehrfacheinfügungsabfrage

Das Codefragment versucht, eine SQL-Abfrage vorzubereiten und auszuführen, um mehrere Werte in eine Tabelle einzufügen. Die Ausführung schlägt jedoch mit dem Fehler „SQLSTATE[HY093]: Ungültige Parameternummer: Parameter wurde nicht definiert“ fehl.

Fehlerursache

Der Fehler tritt auf, weil Die Anzahl der Elemente im Array $values ​​stimmt nicht mit der Anzahl der Elemente im Array $matches überein. Die SQL-Abfrage erwartet eine bestimmte Anzahl von Parametern, aber der PHP-Code stellt andere Zahlen bereit.

Lösung

Um den Fehler zu beheben, stellen Sie sicher, dass die Werte $values ​​und $ Übereinstimmungs-Arrays enthalten die gleiche Anzahl an Elementen. Dies kann erreicht werden, indem das Array $values ​​vor der Schleife initialisiert wird.

Zusätzlich wird empfohlen zu prüfen, ob die Hash-Spalte einen eindeutigen Index hat. Ist dies nicht der Fall, funktioniert die ON DUPLICATE KEY UPDATE-Klausel möglicherweise nicht wie erwartet.

Überarbeiteter 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);

Das obige ist der detaillierte Inhalt vonWarum schlägt meine Mehrfach-SQL-INSERT-Abfrage mit „SQLSTATE[HY093]: Ungültige Parameternummer' fehl?. 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