嗨,我对我写数据库有一个疑问:

我是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=abcdefa5=ghijkla6=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/

10-11 12:32