Heim >Datenbank >MySQL-Tutorial >Warum gibt meine Mehrfacheinfügungsabfrage „Ungültige Parameternummer' zurück?

Warum gibt meine Mehrfacheinfügungsabfrage „Ungültige Parameternummer' zurück?

Susan Sarandon
Susan SarandonOriginal
2024-12-13 18:14:10264Durchsuche

Why Does My Multiple Insert Query Return

Fehler: Ungültige Parameternummer in Mehrfacheinfügungsabfrage

Beim Versuch, mehrere Datensätze in eine Datenbanktabelle einzufügen, kann die Fehlermeldung „Ungültige Parameternummer:“ auftreten. Parameter wurde nicht definiert" Fehler. Dies tritt auf, wenn die Anzahl der in der Abfrage angegebenen Parameter nicht mit der Anzahl der als Eingabe bereitgestellten Werte übereinstimmt.

Verstehen des Problems

Im bereitgestellten Codeausschnitt:

$matches = array('1');
$count = count($matches);
for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}

// Build query
$q = $this->dbc->prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash");
$q->execute($matches);

Das Ziel besteht darin, den Wert in $matches mithilfe einer vorbereiteten Anweisung in die Hashes-Tabelle einzufügen. Der Fehler tritt jedoch auf, weil die Anzahl der Platzhalterparameter (?) im Array $values ​​nicht den tatsächlichen Daten in $matches entspricht.

Fix

Um dieses Problem zu beheben, stellen Sie sicher, dass Folgendes:

  1. Arrays initialisieren: Initialisieren Sie das $values-Array immer vor der Schleife, um eine Vorexistenz zu vermeiden Werte.
  2. Datenanzahl bestätigen: Stellen Sie sicher, dass die Anzahl der Elemente in $values ​​der Anzahl der Elemente in $matches entspricht. Wenn nicht, passen Sie die Schleife an oder fügen Sie bedingte Prüfungen hinzu.
  3. Eindeutigen Index erstellen:Überprüfen Sie, ob die Hash-Spalte einen eindeutigen Index hat. Dies verhindert doppelte Einträge und stellt sicher, dass jeder bereitgestellte Wert eingefügt oder aktualisiert wird.
  4. Verwenden Sie eine parametrisierte Anweisung:Verwenden Sie eine vorbereitete Anweisung, um SQL-Injection- und Parameterbindungsprobleme zu verhindern.

Beispiel

$matches = array('1');
$values = [];
$count = count($matches);

for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}

// Insert query with named parameters (:hash)
$sql = "INSERT INTO hashes (hash) VALUES (:hash) ON DUPLICATE KEY UPDATE hash = VALUES(:hash)";
$stmt = $dbh->prepare($sql);
$data = $stmt->execute([':hash' => $matches]);

Das obige ist der detaillierte Inhalt vonWarum gibt meine Mehrfacheinfügungsabfrage „Ungültige Parameternummer' zurück?. 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