【问题标题】:Whats wrong with this sql syntax?这个sql语法有什么问题?
【发布时间】:2012-07-07 02:28:51
【问题描述】:
$sql3 = 
    "INSERT INTO `orders` (cid, eid, order, date_ordered, date_called, status) 
  VALUES ('$cid', '$eid', '$order', '$date_ordered', '$date_called', '$status')";

错误是:

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'order, date_ordered, date_called, status) VALUES ('0012', '0', 'gydfhtfhjghj', '' at line 1 附近使用的正确语法

【问题讨论】:

  • ORDER 是保留字。您需要将其包装在反引号中或将列重命名为明确的名称。
  • 您的错误信息似乎与您的说法不符。此外,尝试将值 'gydfhtfhjghj' 插入日期字段总是可能会失败。
  • 请尽可能不要插入变量来进行动态 SQL 查询。很容易忘记逃避它们,当你逃避时会被字符集问题迷惑,或者被匆忙完成的未来维护迷惑。而是使用parameterized queries

标签: php mysql sql insert


【解决方案1】:

ORDER 是保留关键字。使用不同的名称或将其包装在反引号中(显然它们不称为引号)。

`order`

【讨论】:

  • ... 或者用反引号转义列名
  • 啊啊啊啊啊! 不要用引号括起来!
  • 是的,我试图这样做,但它不会在内联代码中。对不起,修好了。大声笑@Neal 我的坏人。我不知道“`”这种引用的名称。
  • 熟悉 MySQL(和其他查询语言)的每个人都知道它们被称为反引号。
  • 双引号包裹它们是可以接受的,当在语法上合理时,或者更好的是,当处于ANSI_QUOTES模式时,MySQL将把它们识别为定界标识符。
【解决方案2】:

ORDER 是保留字。所以你可以用反引号来逃避它:

$sql3 = 
"INSERT INTO `orders` (cid, eid, `order`, date_ordered, date_called, status) 
 VALUES ('$cid', '$eid', '$order', '$date_ordered', '$date_called', '$status')";

【讨论】:

    猜你喜欢
    • 2012-05-02
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2014-05-08
    • 1970-01-01
    相关资源
    最近更新 更多