2015-11-12 73 views
-3

我试图解决这个问题一个小时,我没有更多的解决方案。 我需要使用一些变量,以形成一个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;"; 
+0

'解析错误:语法错误,意想不到的“''将是一个PHP的错误,而不是一个MySQL错误,您应该使用参数化查询,虽然您的查询。 – chris85

+1

你关闭你的字符串'“,('','$ code','$ _ POST [”'< - 这里,使用单引号进行字符串封装,然后使用'.'来连接变量。 – chris85

+0

你想得到SQL注入?因为这是你注入SQL的方式。使用预处理语句![PDO](http://php.net/manual/en/pdo.prepared-statements.php)/ [mySQLi](http:// php .net/manual/en/mysqli.quickstart.prepared-statements.php) – Sammitch

回答

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) . "')"; 
} 

我已经添加htmlspecialchars func在将变量发送给SQL服务器之前对变量进行清理 - 这将防止一些可能的SQL注入。请阅读此做最好的方法:

How can I prevent SQL injection in PHP?

+0

谢谢。它的工作原理! –

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;"; 

虽然这可能会奏效,请考虑使用参数化方法

+0

似乎没有工作 –