私はPHP/SQLの専門家ではありませんが、SQLINSERTを保護するためにmysql_real_escape_stringを適用する必要があることを発見しました。
私はネット上で見つけたいくつかのアドバイスを使って関数を作りました、ここにそれがあります:
function secure($string)
{
if(is_numeric($string))
{ $string = intval($string); }
elseif (is_array($string))
{
foreach ($string as $key => $value) {
$string[$key] = secure($value);
}
}
else if ($string === null)
{
$string = 'NULL';
}
elseif (is_bool($string))
{
$string = $string ? 1 : 0;
}
else
{
if (get_magic_quotes_gpc()) { $value = stripslashes($string); }
$string = mysql_real_escape_string($string);
$string = addcslashes($string, '%_');
}
return $string;
}
テーブルの内容を見ると、バックスラッシュが含まれています。そして論理的には、データを取得するときに、これらのバックスラッシュを削除するためにストリップスラッシュを適用する必要があります。
マジッククォートはオフです。
質問1) SQL挿入前にデータを保護するためにmysql_real_escape_stringを使用しても、コンテンツにバックスラッシュが表示されるべきではないと思いますか?これを確認できますか?
質問2) 正常でない場合、これらのバックスラッシュがphpMyAdminのコンテンツと取得に表示されるのはなぜですか?私は何を間違えましたか?
質問3) mysql_real_escape_stringは2回適用できると思いますが、そうではありませんか?もしそうなら、mysql_real_escape_stringが同じ文字列に何度も適用され、多くの\\が同じエスケープ可能な文字につながるのを防ぐための関数は何でしょうか?
ご入力いただきありがとうございます。