查询失败您的SQL语法中有错误

时间:2016-10-28 10:52:18

标签: php mysql json

[ASK] 我的php错误"查询失败你的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以获得正确的语法,以便使用附近的订单(iduser,idfood,jumlah,total)VALUES(9,1,2,20000)'在第1行" 什么错了......?

myphp

<?php  
$data= file_get_contents('php://input');
    $array = json_decode($data, true);

    require_once ('..../db_connectfood.php');

    $db = new DB_CONNECT();

    foreach($array as $row)  
    {  
      $idusr = $row["iduser"];
       $idfd = $row["idfood"];
       $jml = $row["jumlah"];
       $total = $row["total"];
       $result = mysql_query("INSERT INTO order (iduser, idfood, jumlah, total) VALUES ($idusr, $idfd, $jml, $total)") or die ("Failed query ".mysql_error());        

    }  
    if ($result) {
        // successfully inserted into database
        $response["success"] = 1;
        $response["message"] = "successfully created.";

        // echoing JSON response
        echo json_encode($response);
    } else {
        // failed to insert row
        $response["success"] = 0;
        $response["message"] = "Oops! An error occurred.";

        // echoing JSON response
        echo json_encode($response);
    }

?>  

如何从这个php获得价值成功和消息?

enter image description here

iduser和idfood是外键

3 个答案:

答案 0 :(得分:1)

order是SQL中的保留字。最好的方法是更改​​表格的名称(例如,更改为orders,复数形式)。如果这是不可能的,你可以使用反引号来逃避名称:

INSERT INTO `order` (iduser, idfood, jumlah, total)
VALUES ($idusr, $idfd, $jml, $total)

强制性评论:
在SQL语句中使用字符串操作会使代码容易受到SQL注入攻击。您应该考虑使用prepared statement代替。

答案 1 :(得分:0)

嗨,请试试这个:

$ result = mysql_query(“INSERT INTO databasename.order(iduser,idfood,jumlah,total)VALUES($ idusr,$ idfd,$ jml,$ total)”)或die(“Failed query”.mysql_error() );

order是来自mysql的命名词。

最好的问候。

答案 2 :(得分:0)

orderreserved word

为了能够在查询中使用保留字,你必须使用反引号将其包围,如“保留字”一样(小心反引号可能看起来像单引号,但它不是)。

所以,在你的情况下改变

$result = mysql_query("INSERT INTO order (iduser, idfood, jumlah, total) VALUES ($idusr, $idfd, $jml, $total)") or die ("Failed query ".mysql_error());

$result = mysql_query("INSERT INTO `order` (iduser, idfood, jumlah, total) VALUES ($idusr, $idfd, $jml, $total)") or die ("Failed query ".mysql_error());

...并检查其余的表名或列名是否为保留字。

作为最好的&amp;建议使用安全实践,参数化查询/预准备语句。