ホームページ >データベース >mysql チュートリアル >mysql_real_escape_string() はプリペアドステートメントでも必要ですか?

mysql_real_escape_string() はプリペアドステートメントでも必要ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 07:50:02862ブラウズ

Is mysql_real_escape_string() Still Necessary with Prepared Statements?

準備されたステートメント内の文字列のエスケープ: mysql_real_escape_string() の必要性

SQL クエリを操作する場合、ユーザー指定の入力をエスケープすることで SQL インジェクション攻撃を防ぐことが重要です。疑問が生じます: プリペアド ステートメントを利用する場合、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();
$sql->bind_result($location);

$data = array();

while ($sql->fetch()) {
    $data[] = array('label' => $location);
}</code>

プリペアド ステートメントはデータをクエリから分離することで SQL のセキュリティを強化し、SQL セキュリティを強化します。悪意のある注射。ただし、mysql_real_escape_string() が廃止されるわけではありません。

データ入力によってクエリが変更されないようにするには、コードを簡単に変更することでさらに安全性を高めることができます。

<code class="php">$sql->execute([$consulta]);</code>

これChange は、「?」を利用して、execute メソッドを通じてパラメータを直接渡します。プレースホルダー。ただし、HTML インジェクション攻撃を防ぐために、出力する前に htmlspecialchars() を通じてユーザー入力を処理することを忘れないでください。

プリペアド ステートメントの適切な使用法を遵守することで、mysql_real_escape_string() の必要性がなくなり、SQL クエリのセキュリティが強化されます。 .

以上がmysql_real_escape_string() はプリペアドステートメントでも必要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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