„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 08.11.2024
Durchsuche:985

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 Methode update() 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 unten korrigierte Code behebt dies Fehler, indem die Parameter in der richtigen Reihenfolge gebunden und zusätzliche Fehlerbehandlung bereitgestellt werden:

$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);

Bezüglich Ihrer spezifischen Anfragen:

  1. Die Meldung „0 Zeilen eingefügt“, auf die Sie gestoßen sind, ist fällig zur umgekehrten 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.
Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729512196. Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3