Verwendung des „like“-Platzhalters in vorbereiteten Anweisungen
Vorbereitete Anweisungen bieten eine effektive Möglichkeit, SQL-Abfragen auszuführen, indem sie SQL-Injection-Angriffe verhindern und die Leistung verbessern . Allerdings kann die Integration des „like“-Platzhalters in vorbereitete Anweisungen etwas knifflig sein.
Betrachten Sie die folgende Abfrage, die anhand eines Schlüsselworts nach Zeilen in der „Analyse“-Tabelle sucht:
PreparedStatement pstmt = con.prepareStatement( "SELECT * FROM analysis WHERE notes like ?"); pstmt.setString(1, notes); ResultSet rs = pstmt.executeQuery();
Um den Platzhalter „like“ bei dieser Abfrage zu verwenden, müssen Sie ihn in den Wert einschließen, der an den Parameter der vorbereiteten Anweisung gebunden wird. Das einfache Hinzufügen von „keyword%“ zu pstmt.setString(1, Notes) reicht nicht aus.
Stattdessen können Sie je nach Bedarf Präfix, Suffix oder globalen Abgleich implementieren:
notes = notes .replace("!", "!!") .replace("%", "!%") .replace("_", "!_") .replace("[", "!["); PreparedStatement pstmt = con.prepareStatement( "SELECT * FROM analysis WHERE notes LIKE ? ESCAPE '!'"); pstmt.setString(1, notes + "%");
pstmt.setString(1, "%" + notes);
pstmt.setString(1, "%" + notes + "%");
Denken Sie daran, Sonderzeichen in der Zeichenfolge „notes“ mit einem Schrägstrich () zu maskieren, um zu verhindern, dass sie den Platzhalter „like“ beeinträchtigen suchen.
Das obige ist der detaillierte Inhalt vonWie nutzt man den Platzhalter „like' effektiv bei vorbereiteten Anweisungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!