您好我对我写入数据库的问题:
我是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=ghijkl
的输出为:
a6=mnopq
我不明白,反弹不应该产生影响吗?
答案 0 :(得分:5)
逃避的目的是阻止具有特殊含义的字符(例如'
)具有特殊含义。由于您要转义包含所有引用值的SQL片段,因此您将转义引号并阻止它们引用这些值。
在引用之前,您需要转义每个值。:
$values = $values.'\''.$_POST[$r].'\', ';
//^^^^^^^^^^ Escape this
然而:
请勿使用已被mysql_escape_string
取代的mysql_real_escape_string
,但请勿使用mysql_*
,请勿使用{{1}},it is deprecated
选择modern replacement并使用prepared statements and bound arguments而不是转义字符串,并通过字符串连接将它们拼凑成SQL。