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=ghijkl的输出a6=mnopq为:

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

我不明白,反冲应该不会有影响吧?

4

1 回答 1

5

转义的目的是阻止具有特殊含义的字符(例如')具有该特殊含义。由于您正在转义包含所有引用值的 SQL 片段,因此您正在转义引号并阻止它们引用这些值。

您需要在引用每个值之前对其进行转义。:

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

然而:

Don't use mysql_escape_stringit is broken 已替换为mysql_real_escape_string,但甚至不要使用,根本不要使用mysql_*它已被弃用

选择一个现代替代品并使用准备好的语句和绑定参数,而不是转义字符串并通过字符串连接将它们组合到 SQL 中。

于 2012-12-14T13:55:12.103 回答