ホームページ >データベース >mysql チュートリアル >MySQL の LIKE '%{$var}%' を準備済みステートメントで安全に使用するにはどうすればよいですか?
データベースの保護: 準備されたステートメントでの 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 サイトの他の関連記事を参照してください。