Heim >Backend-Entwicklung >PHP-Tutorial >Wie erstelle ich eine sichere, von MySQLi vorbereitete Anweisung mit variablen LIKE-Bedingungen?
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
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.
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.
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.
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:
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!