ホームページ >データベース >mysql チュートリアル >MySQL の LIKE '%{$var}%' を準備済みステートメントで安全に使用するにはどうすればよいですか?

MySQL の LIKE '%{$var}%' を準備済みステートメントで安全に使用するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-16 10:52:59883ブラウズ

How Can I Safely Use MySQL's LIKE '%{$var}%' with Prepared Statements?

データベースの保護: 準備されたステートメントでの LIKE '%{$var}%' の適切な使用

ユーザー入力に応答する動的検索機能を構築するには、セキュリティを慎重に考慮する必要があります。 一般的なシナリオには、MySQL の LIKE 演算子を使用して、部分一致を含むユーザー名を検索することが含まれます。 ただし、準備されたステートメント内の LIKE 句にユーザー入力を直接組み込むと、SQL インジェクションの脆弱性が発生する可能性があります。

誤ったアプローチでは、LIKE などのワイルドカード文字を SELECT * FROM users WHERE username LIKE '%{?}%' 内に埋め込む試みが含まれることがよくあります。プレースホルダー構文がデータベース ドライバーによって正しく解釈されないため、これには欠陥があります。

安全な実装の鍵は、ステートメントを準備するLIKE式を構築することにあります。これにより、ユーザー入力が適切にサニタイズされ、実行可能コードではなくデータとして扱われることが保証されます。 正しい方法は次のとおりです:

<code class="language-php">$searchParam = "%" . $yourParam . "%"; // Prepend and append wildcards
$stmt = $mysqli->prepare("SELECT * FROM REGISTRY WHERE name LIKE ?");
$stmt->bind_param("s", $searchParam); // Bind the complete LIKE expression
$stmt->execute();</code>

この改良された例では、% ワイルドカードがユーザー指定の $yourParam に追加され、LIKE に保存される完全な $searchParam パターンが作成されます。 次に、この完全なパターンは、文字列型 ("s") の bind_param を使用して、準備されたステートメントのプレースホルダーにバインドされます。 これにより、動的検索機能を維持しながら SQL インジェクションを防止できます。 このアプローチでは、準備されたステートメントによって提供されるセキュリティと効率の両方が保証されます。

以上がMySQL の LIKE '%{$var}%' を準備済みステートメントで安全に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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