Heim >Backend-Entwicklung >PHP-Tutorial >Wie erstelle ich eine sichere, von MySQLi vorbereitete Anweisung mit variablen LIKE-Bedingungen?

Wie erstelle ich eine sichere, von MySQLi vorbereitete Anweisung mit variablen LIKE-Bedingungen?

DDD
DDDOriginal
2024-12-04 11:39:151324Durchsuche

How to Build a Secure MySQLi Prepared Statement with Variable LIKE Conditions?

Erstellen einer SELECT-Abfrage mit variablen LIKE-Bedingungen als vorbereitete MySQL-Anweisung

Bei der Arbeit mit Benutzereingaben ist es wichtig, Anweisungen vorzubereiten, um dies zu verhindern SQL-Injections und Gewährleistung der Datenintegrität. Dies wird zu einer Herausforderung, wenn die Anzahl der LIKE-Bedingungen variabel ist.

Problemübersicht

Das Code-Snippet versucht, dieses Problem zu lösen, indem es die LIKE-Bedingungen basierend auf Benutzereingaben dynamisch erstellt . Allerdings werden die Parameter für die vorbereitete Anweisung nicht korrekt formatiert.

Lösung

Die Lösung besteht darin, die %-Platzhalter um die Parameter herum zu platzieren, nicht um die Platzhalter. Dadurch wird sichergestellt, dass die Parameter zum Filtern der Abfrage verwendet werden.

Detaillierte Erläuterung

  1. Zutaten initialisieren:

    a. Erstellen Sie ein Array von WHERE-Klauselausdrücken mithilfe von ORs.
    b. Bestimmen Sie die Datentypen der Werte (in diesem Fall Strings).
    c. Kombinieren Sie die Datentypen und Parameter in einem einzigen Array.

  2. Bedingungen vorbereiten:

    a. Konvertieren Sie Benutzereingaben in ein Array eindeutiger Werte.
    b. Erstellen Sie für jeden Wert einen LIKE-Ausdruck.
    c. Aktualisieren Sie das Parameter-Array, um Datentypen und Platzhalterwerte einzuschließen.

  3. Abfrage vorbereiten:

    a. Beginnen Sie mit einer einfachen SELECT *-Abfrage.
    b. Wenn Bedingungen vorhanden sind, fügen Sie eine WHERE-Klausel mit den dynamischen Ausdrücken hinzu.

  4. Parameter binden und ausführen:

    a. Binden Sie das Parameterarray mit dem Splat-Operator (...) an die vorbereitete Anweisung.
    b. Führen Sie die Anweisung aus und rufen Sie ggf. Ergebnisse ab.

Beispielcode:

$string = "Bill N_d Dave";

$conditions = [];
$parameters = [''];
foreach (array_unique(explode(' ', $string)) as $value) {
    $conditions[] = "name LIKE ?";
    $parameters[0] .= 's';
    $parameters[] = "%{$value}%";
}

$query = "SELECT * FROM info";
if ($conditions) {
    $stmt = $mysqli->prepare($query . ' WHERE ' . implode(' OR ', $conditions));
    $stmt->bind_param(...$parameters);
    $stmt->execute();
    $result = $stmt->get_result();
} else {
    $result = $conn->query($query);
}

foreach ($result as $row) {
    echo "<div>{$row['name']}</div>\n";
}

Zusätzliche Hinweise:

  • Wenn keine Bedingungen angegeben sind, führen Sie die Abfrage ohne WHERE aus Klausel.
  • Erwägen Sie bei Bedarf die Verwendung von addcslashes(), um Platzhalter in Benutzereingaben zu maskieren.

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine sichere, von MySQLi vorbereitete Anweisung mit variablen LIKE-Bedingungen?. 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