ホームページ > データベース > mysql チュートリアル > プリペアドステートメントはどのようにして LIKE 検索の効率とセキュリティを向上させることができるのでしょうか?

プリペアドステートメントはどのようにして LIKE 検索の効率とセキュリティを向上させることができるのでしょうか?

Susan Sarandon
リリース: 2025-01-16 10:57:58
オリジナル
285 人が閲覧しました

How Can Prepared Statements Improve the Efficiency and Security of LIKE Searches?

準備されたステートメントを使用した LIKE 検索の最適化

パターン マッチングに LIKE 演算子を使用するデータベース クエリは、脆弱性を防止し、パフォーマンスを確保するために慎重に処理する必要があります。 不適切に使用するとエラーが発生する可能性があります。

いくつかの欠陥のあるアプローチを調べてみましょう:

<code class="language-sql">$sql = 'SELECT * FROM `users` WHERE username LIKE \'%{?}%\' ';</code>
ログイン後にコピー

SQL 文字列内の変数の数が bind_param() に指定されたパラメーターと一致しないため、これは失敗します。

<code class="language-sql">$sql = 'SELECT * FROM `users` WHERE username LIKE %{?}% ';</code>
ログイン後にコピー

クエリ文字列内のワイルドカード文字 (%{}) の配置が間違っているため、構文エラーが発生します。

正しい方法では、準備されたステートメントを使用し、疑問符のプレースホルダーを使用し、変数を適切にバインドします。

<code class="language-php">$likeVar = "%" . $yourParam . "%";
$stmt = $mysqli->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->bind_param("s", $likeVar);
$stmt->execute();</code>
ログイン後にコピー

このコード:

  1. ユーザー入力 ($yourParam) にパーセント記号を連結してパターンを構築します。
  2. ? プレースホルダーを使用してクエリを準備します。
  3. bind_param() を使用してパターン文字列 (文字列の「s」) をバインドします。
  4. 準備されたステートメントを実行します。

LIKE とともに準備されたステートメントを使用すると、SQL インジェクションが防止され、クエリの効率が向上します。

以上がプリペアドステートメントはどのようにして LIKE 検索の効率とセキュリティを向上させることができるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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