【问题标题】:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'range [duplicate]您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在 'range [重复] 附近使用的正确语法
【发布时间】:2017-02-05 20:53:06
【问题描述】:

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 (?,?,?,?,?,?,?,?)'

【问题讨论】:

  • 关于 sql 的 5 篇文章中的第 1 篇文章表明 OP 实际上并未使用已弃用的 sql 库。你在正确的轨道上萨钦

标签: php mysql json


【解决方案1】:

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

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

Here 是保留字列表。

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

我应该补充一下:FROMTOGROUP 等保留字是显而易见的,但对我来说,RANGE 作为保留字是相当出乎意料的,因为许多句法元素没有保留,例如如OFFSETPARTITIONSHASH(也用于分区)、HOURBEGIN

【讨论】:

  • “但是 RANGE 作为保留字是相当出乎意料的。” - 我不太明白你的意思。 dev.mysql.com/doc/refman/5.7/en/keywords.htmlRANGE (R).
  • @Fred-ii-。 . .完全主观。对我来说,当 RANGEPARTITION 被保留但 HASHPARTITIONS 没有被保留时,这是出乎意料的。它们都是同一个子句的关键字。
  • 如果你这样做,我会转义所有列,以保持一致性。
  • 哦,太好了,现在我的代码可以工作了。谢谢...戈登林诺夫
猜你喜欢
  • 2018-07-13
  • 2016-07-01
  • 2021-05-12
  • 2018-11-27
  • 1970-01-01
  • 2016-11-06
  • 2019-10-24
  • 2017-02-11
  • 2012-05-02
相关资源
最近更新 更多