Heim >Backend-Entwicklung >PHP-Tutorial >Wie behebe ich eine falsche Parameterreihenfolge in Datenbankaktualisierungen für vorbereitete PHP-Anweisungen?

Wie behebe ich eine falsche Parameterreihenfolge in Datenbankaktualisierungen für vorbereitete PHP-Anweisungen?

DDD
DDDOriginal
2024-10-21 20:06:29779Durchsuche

How to Resolve Incorrect Parameter Order in PHP Prepared Statement Database Updates?

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:

  1. Die Meldung „0 Zeilen eingefügt“, die Sie erhalten haben, ist darauf zurückzuführen die umgekehrte Parameterreihenfolge. Die Parameter id und content wurden in der falschen Reihenfolge gebunden, was dazu führte, dass die WHERE-Klausel keine Zeilen übereinstimmte.
  2. Beim Aktualisieren einer Tabelle ist es akzeptabel, nur die Felder zu ändern, die Sie benötigen. Andere Spalten in der Tabelle bleiben unverändert.

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!

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