プリペアド ステートメントでの "like" ワイルドカードの利用
プリペアド ステートメントは、SQL インジェクション攻撃を防止し、パフォーマンスを向上させることで SQL クエリを実行する効果的な方法を提供します。 。ただし、「like」ワイルドカードとプリペアド ステートメントの統合は、少し難しい場合があります。
キーワードに基づいて「分析」テーブル内の行を検索する次のクエリを考えてみましょう。
PreparedStatement pstmt = con.prepareStatement( "SELECT * FROM analysis WHERE notes like ?"); pstmt.setString(1, notes); ResultSet rs = pstmt.executeQuery();
このクエリで「like」ワイルドカードを使用するには、準備されたステートメントのパラメーターにバインドされる値内にワイルドカードを含める必要があります。 pstmt.setString(1, Notes) に単に「keyword%」を追加するだけでは十分ではありません。
代わりに、必要に応じてプレフィックス、サフィックス、またはグローバル マッチングを実装できます。
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 + "%");
「like」ワイルドカードと干渉しないように、「notes」文字列内の特殊文字をスラッシュ () を使用してエスケープすることを忘れないでください。検索します。
以上が準備されたステートメントで「like」ワイルドカードを効果的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。