質問:
準備されたステートメントを使用する場合、mysql_real_escape_string() 関数を使用する必要がありますか?データベース クエリのステートメント?
コンテキスト:
提供されたコードは、mysqli ライブラリを使用したプリペアド ステートメント クエリを示しています。ただし、現在はユーザー入力をサニタイズするために mysql_real_escape_string() 関数を使用しています。
<code class="php">$consulta = $_REQUEST["term"]."%"; ($sql = $db->prepare('select location from location_job where location like ?')); $sql->bind_param('s', $consulta); $sql->execute();</code>
答え:
いいえ、プリペアド ステートメントは SQL インジェクションに対する固有の保護を提供し、適切に使用した場合のデータ操作。これらは入力を自動的にサニタイズし、mysql_real_escape_string() を冗長にします。
改善点:
クエリはプリペアド ステートメントを正しく使用していますが、軽微な変更により効率が向上します。 bind_param() メソッドを使用する代わりに、execute() メソッドを使用してパラメータを直接渡すことができます。
<code class="php">$sql->execute([$consulta]);</code>
補足:
プリペアド ステートメントは保護しますが、 SQL インジェクションに対しては、データをページに出力する際の安全性は保証されません。潜在的なクロスサイト スクリプティング (XSS) 攻撃を防ぐには、ブラウザに出力する前に htmlspecialchars() を使用してデータを HTML エンコードすることをお勧めします。
以上が準備されたステートメントにはセキュリティのために「mysql_real_escape_string()」が必要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。