4

その間、私はPHP.net#mysqli_real_escape_stringmysqli->real_escape_stringで について読んでいました。いくつかの行、それらが何を意味するのか、使用中にどの文字セットが安全かを理解できませんでしたreal_escape_string

注意 セキュリティ: デフォルトの文字セット

mysqli_real_escape_string() に影響を与えるには、文字セットをサーバー レベルで設定するか、API 関数 mysqli_set_charset() を使用して設定する必要があります。詳細については、文字セットの概念セクションを参照してください。

誰かが私を説明してくれませんか、安全かどうか: utf-8-default latin

ここに状況を説明するコードスニペットがありますhttp://in1.php.net/manual/en/mysqli.real-escape-string.php

これは何を意味するのでしょうか ?

<?php

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

// Will not affect $mysqli->real_escape_string();
$mysqli->query("SET NAMES utf8");

// Will not affect $mysqli->real_escape_string();
$mysqli->query("SET CHARACTER SET utf8");

// But, this will affect $mysqli->real_escape_string();
$mysqli->set_charset('utf8');

?>

ありがとう

4

1 に答える 1

6

使用している場合は任意の文字セットmysqli_set_charset()

また、そうでない場合でもutf-8デフォルトは安全です。latin

このプロセスには 2 つの側面が関与しています。サーバーとクライアント。client は PHP スクリプトです。したがって、エスケープがクライアント側 (つまり PHP) で行われるという理由だけで、PHP はデータをエスケープする方法を知る必要があります。これは正確に何ですかmysqli_set_charset()- サーバーに着信データのエンコーディングをreal_escape_string知らせ、どのエンコーディングデータが入っているかを知らせます。

SET NAMESクエリはジョブの一部のみを実行し、サーバーにのみ通知real_escape_stringし、デフォルトの状態のままにします。ただし、いずれutf-8にせよデフォルトlatinは不死身です。

于 2013-10-23T05:42:22.917 に答える