ホームページ >データベース >mysql チュートリアル >PHP で LIKE クエリでプリペアド ステートメントを安全に使用する方法

PHP で LIKE クエリでプリペアド ステートメントを安全に使用する方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-16 11:07:57556ブラウズ

How to Safely Use Prepared Statements with LIKE Queries in PHP?

準備されたステートメントと LIKE クエリを理解する

PHP では、LIKE クエリに準備されたステートメントを使用する場合、潜在的なエラーを避けるために文字列パラメーターを慎重に処理する必要があります。プリペアド ステートメントはプレースホルダー (?) を利用して、パフォーマンスを向上させながら SQL インジェクションを防止します。

ケース 1: '%{$var}%' を使用してユーザー名と一致させます

次のコード:

<code class="language-php">$sql = 'SELECT * FROM `users` WHERE username LIKE \'%{?}%\' ';</code>

は、準備された SQL ステートメントでプレースホルダー ? が適切に定義されていないため、エラーをスローします。

ケース 2: %{?}% を使用してユーザー名と一致させる

次のコード:

<code class="language-php">$sql = 'SELECT * FROM `users` WHERE username LIKE %{?}% ';</code>

も構文が無効であるため失敗します。パーセント記号 (%) は、準備されたステートメントのプレースホルダーとして直接使用できません。

解決策: 連結された LIKE 変数を使用します

この問題を解決するには、連結された LIKE 変数を使用します:

<code class="language-php">$likeVar = "%" . $yourParam . "%";
$stmt = $mysqli->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->bind_param("s", $likeVar);
$stmt->execute();</code>

この例では、$likeVar はパーセント記号とユーザー入力 $yourParam を組み合わせて構築されます。次に、LIKE 条件は ? プレースホルダーを使用します。これは、パラメーターのバインド中に連結された文字列 $likeVar にバインドされます。

このアプローチにより、パーセント記号は準備されたステートメントの構文要素ではなくリテラル文字として扱われるようになります。また、$likeVar に正しいワイルドカード文字が含まれていることを確認することで、大文字と小文字を区別しない検索も可能になります。

以上がPHP で LIKE クエリでプリペアド ステートメントを安全に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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