嗨,我对我写数据库有一个疑问:
我是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
的输出为:\'abcdef\', \'ghijkl\', \'mnopq\'<br />
a1, a2, a3
我不明白,这种强烈反对不会产生影响吗?
最佳答案
转义的目的是阻止具有特殊含义(例如'
)的字符具有特殊含义。由于您要转义包含所有带引号的值的SQL片段,因此要转义引号并停止其对值进行引号。
您需要在引用每个值之前对其进行转义。
$values = $values.'\''.$_POST[$r].'\', ';
//^^^^^^^^^^ Escape this
然而:
不要使用已损坏的
mysql_escape_string
,而已将其替换为mysql_real_escape_string
,但是甚至不要使用它,也不要使用mysql_*
,it is deprecated。选择一个modern replacement并使用prepared statements and bound arguments代替转义字符串,然后通过字符串合并将它们融合到SQL中。
关于php - mysqli_escape_string我如何实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13879976/