mysqli_escape_string我该如何实现呢?

时间:2012-12-14 13:52:49

标签: php mysql

您好我对我写入数据库的问题:

我是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

printfa4=abcdefa5=ghijkl的输出为:

a6=mnopq

我不明白,反弹不应该产生影响吗?

1 个答案:

答案 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。