PHP-vorbereitete Anweisung für Datenbankaktualisierungen
Diese Diskussion dreht sich um die ordnungsgemäße Verwendung vorbereiteter Anweisungen in PHP, um Schwachstellen wie SQL-Injections zu verhindern. Der Zweck des betreffenden Codeblocks besteht darin, eine Datenbanktabelle mit einem einzelnen Feld mithilfe einer vorbereiteten Anweisung zu aktualisieren.
Im bereitgestellten Code verwendet die update()-Methode in der Datei class.Scripts.inc eine vorbereitete Anweisung -Anweisung in einem Versuch, die Datadump-Tabelle zu aktualisieren. Die Ausführung ist jedoch aufgrund einer falschen Parameterreihenfolge während der Methode bind_param() nicht erfolgreich. Der aktuelle Code bindet die Parameter in der Reihenfolge von $id und $content, während die SQL-Anweisung sie in der umgekehrten Reihenfolge erwartet, was zu einer falschen Datensatzidentifizierung führt und null Zeilen betrifft.
Der folgende korrigierte Code behebt dieses Problem Fehler durch Bindung der Parameter in der richtigen Reihenfolge und Bereitstellung zusätzlicher Fehlerbehandlung:
<code class="php">$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?"); /* Always check whether the prepare() succeeded */ if ($stmt === false) { trigger_error($this->mysqli->error, E_USER_ERROR); return; } $id = 1; /* Bind our params */ /* Bind variables in the same order as SQL params */ $stmt->bind_param('si', $content, $id); /* Set our params */ /* No escaping needed when using prepared statements */ $content = $_POST['content'] ?: ''; /* Execute the prepared Statement */ $status = $stmt->execute(); /* Always check whether the execute() succeeded */ if ($status === false) { trigger_error($stmt->error, E_USER_ERROR); } printf("%d Row inserted.\n", $stmt->affected_rows);</code>
Bezüglich Ihrer spezifischen Anfragen:
Das obige ist der detaillierte Inhalt vonWie behebe ich eine falsche Parameterreihenfolge in Datenbankaktualisierungen für vorbereitete PHP-Anweisungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!