ホームページ >データベース >mysql チュートリアル >準備されたステートメントと「LIKE」キーワードを使用してワイルドカード検索を安全に実装するにはどうすればよいですか?

準備されたステートメントと「LIKE」キーワードを使用してワイルドカード検索を安全に実装するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-10 03:22:14182ブラウズ

How Can I Implement Wildcard Searches Securely with Prepared Statements and the

「like」キーワードを使用した準備済みステートメントによるワイルドカード検索の実装

準備済みステートメントは、データベース クエリを安全かつ効率的に実行する方法を提供します。キーワードに基づく検索機能を実装するには、「いいね」キーワードを利用できます。プリペアド ステートメントで "like" を使用するには、キーワードのワイルドカード コンポーネントをクエリに組み込む必要があります。

次のようなクエリがあるとします。

PreparedStatement pstmt = con.prepareStatement(
      "SELECT * FROM analysis WHERE notes like ?");

ワイルドカード検索を実行するには、クエリでワイルドカード パターンを指定する必要があります。これは、キーワード値の後にワイルドカード文字 (「%」) を挿入することで実現されます。たとえば、接頭辞一致検索を実行したい場合は、疑問符をnotes%:

pstmt.setString(1, notes + "%");

のようなパラメータに置き換えることができます。あるいは、ワイルドカードを付加して接尾辞一致を使用することもできます。キーワード値の先頭:

pstmt.setString(1, "%" + notes);

グローバル一致の場合、キーワード値を次で囲むことができます。ワイルドカード:

pstmt.setString(1, "%" + notes + "%");

「%」のような特殊文字を使用する場合、準備されたステートメントに干渉する可能性があることに注意することが重要です。この干渉を防ぐために、エスケープ文字を利用できます。たとえば、上記のコードでは、ワイルドカード文字がメタ文字として解釈されないようにエスケープ文字 (「!」) を導入しました。

PreparedStatement pstmt = con.prepareStatement(
        "SELECT * FROM analysis WHERE notes LIKE ? ESCAPE '!'");

これにより、ワイルドカード文字がメタ文字として扱われることが保証されます。メタキャラクターではなくリテラル文字。

以上が準備されたステートメントと「LIKE」キーワードを使用してワイルドカード検索を安全に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。