ホームページ > データベース > mysql チュートリアル > 効率的な検索のために SQL のプリペアド ステートメントでワイルドカードを安全に使用するにはどうすればよいですか?

効率的な検索のために SQL のプリペアド ステートメントでワイルドカードを安全に使用するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-19 18:52:17
オリジナル
1035 人が閲覧しました

How Can I Safely Use Wildcards with Prepared Statements in SQL for Efficient Searching?

検索機能の準備されたステートメントでのワイルドカードの使用

検索パラメータとしてキーワードを使用する検索機能を実装する場合、 SQL の LIKE キーワード。ただし、LIKE をプリペアド ステートメントと統合するのは少し難しい場合があります。

この例では:

PreparedStatement pstmt = con.prepareStatement(
      "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes);
ログイン後にコピー

SQL 文字列内のプレースホルダー (?) は、設定されるパラメーターを表します。 LIKE キーワード。この場合、プレースホルダー パラメーターに割り当てられた値に キーワード% を追加する必要があります。

解決策:

準備されたパラメータで LIKE を使用するにはステートメントでは、ワイルドカード ('%') を SQL 文字列ではなく値自体に直接設定する必要があります。これは、パラメータを設定するときに値にワイルドカードを追加することで実行できます:

pstmt.setString(1, notes + "%");
ログイン後にコピー

前方一致が必要な場合は、ワイルドカードを値の先頭に配置する必要があります:

pstmt.setString(1, "%" + notes);
ログイン後にコピー

グローバル一致の場合、ワイルドカードを値の両端に配置する必要があります:

pstmt.setString(1, "%" + notes + "%");
ログイン後にコピー

注意が重要です。 %、_、[、! などの値内の特殊文字は、LIKE 句でのワイルドカードとしての使用との競合を避けるためにエスケープする必要があることに注意してください。応答で提供された例では、パラメーターを設定する前にこれらの文字をエスケープ シーケンスに置き換えることで、この問題に適切に対処しています。

以上が効率的な検索のために SQL のプリペアド ステートメントでワイルドカードを安全に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート