Dynamische LIKE-Abfragen mit mysqli-vorbereiteten Anweisungen
Diese Frage befasst sich mit dem Problem der Erstellung einer vorbereiteten Anweisung mit einer variablen Anzahl von LIKE-Bedingungen basierend auf Benutzereingaben. Der bereitgestellte PHP-Code versucht, die Anweisung zu erstellen, es liegt jedoch ein Fehler im Zusammenhang mit der Formatierung der LIKE-Klauseln vor.
Das Hauptproblem liegt darin, wo die Prozentzeichen (%) um die Parameter (?) platziert werden. in den LIKE-Klauseln. Anstatt die Parameter zu umschließen, sollten die Prozentzeichen die Platzhalter umgeben, wie unten gezeigt:
foreach ( $search_exploded as $search_each ) { $x ++; if ( $x == 1 ) { $construct .= "name LIKE %??%"; } else { $construct .= " or name LIKE %??%"; } }
Diese Korrektur stellt sicher, dass die Parameterwerte (z. B. „mein Name“) korrekt an die LIKE-Klauseln gebunden sind .
Zusätzlich verwendet der Code eine verkettete Zeichenfolge ($construct), um die WHERE-Klausel zu erstellen. Ein effizienterer und sichererer Ansatz ist jedoch die Verwendung eines bind_param()-Platzhalterarrays für alle Parameter, wie unten gezeigt:
$where_params = []; foreach ( $search_exploded as $search_each ) { $where_params[] = "%{$search_each}%"; } $query = "SELECT * FROM info WHERE name LIKE ?"; $stmt = mysqli_prepare( $conn, $query ); mysqli_stmt_bind_param( $stmt, "s", ...$where_params );
Diese Methode verarbeitet problemlos eine beliebige Anzahl von LIKE-Bedingungen und eliminiert das Risiko einer SQL-Injection Schwachstellen.
Mit diesen Änderungen kann die dynamische LIKE-Abfrage korrekt nach Datensätzen suchen, die auf mehreren benutzerdefinierten Kriterien basieren.
Das obige ist der detaillierte Inhalt vonWie kann man mit mysqli-vorbereiteten Anweisungen effizient dynamische LIKE-Abfragen erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!