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(?,?,?,?,?,?,?,?)'
答案 0 :(得分:2)
这并不明显。 range
是保留字。它会产生一个糟糕的列名,但如果你使用它,你需要转义它:
INSERT INTO service (uid, mobile, service, exper, `range`, a_from, a_to, min_charge)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
Here是保留字的列表。
对于那些好奇的人,RANGE
是一种分区。你可以阅读它here。我不确定为什么MySQL需要保留这个,因为很多关键字实际上都没有保留。
我应该补充一点:当保留字很明显时,例如FROM
,TO
或GROUP
,我投票将这些问题作为一个简单的印刷错误(留下一个评论)。但是对于我来说,RANGE
作为保留字是相当出乎意料的,因为许多语法元素没有被保留,例如OFFSET
,PARTITIONS
,HASH
(也用于分区) ,HOUR
,BEGIN
。