转义$ _POST中的字符

时间:2015-11-12 21:18:54

标签: php escaping

我正试图解决这个问题一个小时,我没有更多的解决方案。 我需要使用一些变量形成一个sql语句,我想我需要转义$ _POST中的引号,因为我得到一个错误(解析错误:语法错误,意外''')

帮助!! 感谢

$counter=$_POST["counter"];

$x=1;
$p="('','$code','$procedure0','$check0')";

while($x<$counter)
{
$p.=",('','$code','$_POST["check".$x]','$_POST["procedure".$x]')";
$x++;
};

...

$sql="INSERT INTO `proceduri` VALUES $p;";

2 个答案:

答案 0 :(得分:1)

请注意你的$ _POST数组在查询中。正确的语法:

for ($x = 0; $x < $counter; $x++) {
    if ($x)
        $p .= ',';

    $p.="('','$code','" . htmlspecialchars($_POST["check".$x], ENT_QUOTES) . "','" . htmlspecialchars($_POST["procedure".$x], ENT_QUOTES) . "')";
}

我在将变量发送到SQL服务器之前添加了htmlspecialchars func来清理变量 - 这将阻止一些可能的SQL注入。请阅读本文以做到最好:

How can I prevent SQL injection in PHP?

答案 1 :(得分:0)

$counter = $_POST["counter"];

$x = 1;
$p = "('','$code','$procedure0','$check0')";

while($x<$counter) {
    $p.= ",('','$code','{$_POST["check".$x]}','{$_POST["procedure".$x]}')";
    $x++;
};

...

$sql="INSERT INTO `proceduri` VALUES $p;";

虽然这可能有效,但请考虑使用参数化方法。