2017-06-14 58 views
0

我不知道为什么在第二轮的foreach给我这个错误产生的:错误的SQL语法,通过一个PHP的foreach

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '8,1)' at line 2"

$Ntavolo = Array ([0] => 46 [idordine] => 46) ; 
$queryordine= "SELECT `idordine` FROM `ordine` WHERE `tavolo`=$Ntavolo ORDER BY `ordine`.`dataora` DESC LIMIT 1"; 
$result = mysqli_query($con,$queryordine); 
$array=Array ([0] => Array ([id] => 1 [qta] => 1) [1] => Array ([id] => 8 [qta] => 1)) ; 
foreach($array as $value){ 
    $row = mysqli_fetch_array($result); 
     print_r($row); 
     print_r($array); 
    $idordine=$row['idordine']; 
    $queryinsert="INSERT INTO `dettaglio` (`iddettaglio`, `idordine`, `idprodotto`, `quantita`) 
    VALUES (NULL, ".$idordine.",".$value['id'].",".$value['qta'].");"; 
    mysqli_query($con,$queryinsert)or die(mysqli_error($con)); 
    echo($queryinsert); 
};?> 
+0

'$ row ['idordine']'也许是空的? – AbraCadaver

+0

或一个字符串.... –

+1

您已经开放SQL注入。由于您使用的是mysqli,请利用[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和[bind_param](http://php.net/手动/ EN/mysqli的-stmt.bind-param.php)。而且您不必担心任何烦人的报价问题。 – aynber

回答

0
$queryinsert="INSERT INTO `dettaglio` (`iddettaglio`, `idordine`, `idprodotto`, `quantita`) 
VALUES (NULL, ".$idordine.",".$value['id'].",".$value['qta'].");"; 

这里只有一个终止;应给予 您插入两个终端

$queryinsert="INSERT INTO `dettaglio` (`iddettaglio`, `idordine`, `idprodotto`, `quantita`) 
    VALUES (NULL, ".$idordine.",".$value['id'].",".$value['qta'].")"; 
+0

其中一个';'是以文本字符串形式发送给MySQL的。另一个是用PHP代码。当然,如果没有设置多重查询,MySQL';'会失败,但这并不明显,因为来自MySQL的错误消息。 – ebyrob

+0

是的,但有一个终止点也会运行。错误是由于他使用的所有逗号而给出的 – coolmonster

+0

'$ hello =“我喜欢的一个词;你好。”;'是完全有效的PHP否?那里只有一个终结者没有? – ebyrob

0

错误是在$行,第二个查询$排不走价值... 谢谢大家!

$row = mysqli_fetch_array($result); 
$idordine=$row['idordine']; 
foreach($array as $value){ 
$queryinsert="INSERT INTO `dettaglio` (`iddettaglio`,`idordine`,`idprodotto`,`quantita`)VALUES (NULL,".$idordine.",".$value['id'].",".$value['qta'].")"; 
mysqli_query($con,$queryinsert)or die(mysqli_error($con));};