Utilisation du caractère générique "like" dans l'instruction préparée
Les instructions préparées offrent un moyen efficace d'exécuter des requêtes SQL en empêchant les attaques par injection SQL et en améliorant les performances . Cependant, l'intégration du caractère générique "J'aime" avec les instructions préparées peut être un peu délicate.
Considérez la requête suivante qui recherche des lignes dans la table "analyse" en fonction d'un mot-clé :
PreparedStatement pstmt = con.prepareStatement( "SELECT * FROM analysis WHERE notes like ?"); pstmt.setString(1, notes); ResultSet rs = pstmt.executeQuery();
Pour utiliser le caractère générique "J'aime" avec cette requête, vous devez l'inclure dans la valeur liée au paramètre de l'instruction préparée. Ajouter simplement "keyword%" à pstmt.setString(1, notes) ne suffira pas.
Au lieu de cela, vous pouvez implémenter un préfixe, un suffixe ou une correspondance globale en fonction de vos besoins :
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 + "%");
N'oubliez pas d'échapper les caractères spéciaux dans la chaîne "notes" à l'aide d'une barre oblique () pour éviter qu'ils n'interfèrent avec le caractère générique "j'aime". recherche.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!