0

こんにちは私は私のデータベースへの書き込みについて質問があります:

mysql_escape_string友達が教えてくれたので、私は初めてです。私が使用しているので、mysql_escape_stringそれはもう私のデータベースに書き込みません。

コードは次のとおりです。

////////////////////////////////////////////////////////////////
 $iets = $_POST['aantal'] + $_POST['begin'];

 for ($i = $_POST['begin'] ; $i < $iets ; $i++){
     $rows = $rows.'a'.$i.', ';
 }

 $rows = mysql_escape_string(trim($rows, ', '));
/////////////////////////////////////////////////////////////////////
 $iets = $_POST['aantal'] + $_POST['begin'];

 for ($i = $_POST['begin'] ; $i < $iets ; $i++){
     $r = 'a'.$i;
    $values = $values.'\''.$_POST[$r].'\', ';
 }

 $values = mysql_escape_string(trim($values, ', '));


$naam = mysql_escape_string($_POST['naam']);

mysql_query("INSERT INTO $naam
(
$rows
)
VALUES 
(
$values
)");
mysql_close($con);


printf("%s<br />%s", $values, $rows);

私が持っているとき:

aantal = 3
begin = 4

printf、、a4=abcdefの出力は次a5=ghijkla6=mnopqとおりです。

\'abcdef\', \'ghijkl\', \'mnopq\'<br />
a1, a2, a3

わかりません。バックラッシュが影響を与えるべきではありませんか?

4

1 に答える 1

5

エスケープのポイントは、特別な意味を持つ文字(たとえば')がその特別な意味を持つのを防ぐことです。引用符で囲まれたすべての値を含むSQLのフラグメントをエスケープしているため、引用符をエスケープして、値の引用を停止します。

引用する前に、値をエスケープする必要があります。

$values = $values.'\''.$_POST[$r].'\', ';
                     //^^^^^^^^^^ Escape this 

でも:

使用しないでくださいmysql_escape_string壊れていますがに置き換えられましたがmysql_real_escape_string、それも使用しないでください、まったく使用しないでくださいmysql_*それは非推奨です

最新の置換を選択し、文字列をエスケープして文字列の連結を介してSQLにまとめる代わりに、プリペアドステートメントとバインドされた引数を使用します。

于 2012-12-14T13:55:12.103 に答える