您的SQL语法有错误;检查与MariaDB服务器版本对应的手册,以便在'range附近使用正确的语法

时间:2017-02-05 20:53:07

标签: php mysql json mysqli

sql代码行:

$uid=$_POST["uid"];
$mobile=$_POST["mobile"];
$service=$_POST["service"];
$exper=$_POST["exper"];
$range=$_POST["range"];
$af=$_POST["a_from"];
$at=$_POST["a_to"];
$min_charge=$_POST["min_charge"];

$statement=mysqli_prepare($con,"INSERT INTO service (uid,mobile,service,exper,range,a_from,a_to,min_charge) VALUES (?,?,?,?,?,?,?,?)");

mysqli_stmt_bind_param($statement,"iisiiiii",$uid,$mobile,$service,$exper,$range,$af,$at,$min_charge);

mysqli_stmt_execute($statement);

$response=array();
$response["success"]=true;

echo mysqli_error($con);
echo json_encode($response);

一切都很好,我编写代码时没有出现任何语法错误(我使用的是代码编辑器软件。但是,当我在线使用它时,我收到此错误:

  

您的SQL语法有错误;检查手册   对应于您的MariaDB服务器版本,以获得正确的语法   接近'range,a_from,a_to,min_charge)VALUES(?,?,?,?,?,?,?,?)'

1 个答案:

答案 0 :(得分:2)

这并不明显。 range是保留字。它会产生一个糟糕的列名,但如果你使用它,你需要转义它:

INSERT INTO service (uid, mobile, service, exper, `range`, a_from, a_to, min_charge)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?)

Here是保留字的列表。

对于那些好奇的人,RANGE是一种分区。你可以阅读它here。我不确定为什么MySQL需要保留这个,因为很多关键字实际上都没有保留。

我应该补充一点:当保留字很明显时,例如FROMTOGROUP,我投票将这些问题作为一个简单的印刷错误(留下一个评论)。但是对于我来说,RANGE作为保留字是相当出乎意料的,因为许多语法元素没有被保留,例如OFFSETPARTITIONSHASH(也用于分区) ,HOURBEGIN