插入查询中的SQL语法错误

时间:2015-01-20 07:16:16

标签: syntax-error sql-insert

大家好我在插入查询中遇到错误 下面是查询

echo $ sql =" INSERT INTO事件(模式,标题,desc,日期,状态)VALUES(' $ mode',' $ title',' ; $降序'' $日期'' $状态')&#34 ;;

及以下是错误

SQL语法错误

检查与MySQL服务器版本对应的手册,以便在'desc,date,status)VALUES('Event','fdsagsd','fa sdgavsd ','2015-01-21','1')' at line 1附近使用正确的语法

3 个答案:

答案 0 :(得分:3)

问题是desc是一个保留字(想到order by),因此当您将其用作列名时,需要使用反引号对其进行配额。

来自section 9.2 of the MySQL documentation

  

MySQL中的某些对象(包括数据库,表,索引,列,别名,视图,存储过程,分区,表空间和其他对象名称)称为标识符。本节介绍MySQL中标识符的允许语法。第9.2.2节“标识符区分大小写”描述了哪些类型的标识符区分大小写以及在什么条件下。

     

标识符可以引用或不引用。如果标识符包含特殊字符或是保留字,则无论何时引用它都必须引用它。

     

...

     

标识符引号字符是反引号(“`”):

mysql> SELECT * FROM `select` WHERE `select`.id > 100;

所以你想要的SQL是:

INSERT INTO event(mode, title, `desc`, date, status)
VALUES ('Event', 'fdsagsd', 'fa sdgavsd ', '2015-01-21','1')

(额外的空格当然不是 ,但我建议将它们包括在内以使SQL更具可读性。)

当然,鉴于您需要在使用它的任何地方引用列名称,您可能会认为将其重命名为更简单,以便 >一个保留字 - 部分取决于其他代码已使用该模式的程度。

答案 1 :(得分:2)

描述被误解*。你需要用``来逃避它,或者使用一个更好的名称作为描述的列(最好是后者或两者)。

INSERT INTO event(mode,title,`desc`,date,status)VALUES('Event','fdsagsd','fa sdgavsd ','2015-01-21','1');
  • Desc也用于SELECT查询,以按指定列的顺序对结果进行排序。

答案 2 :(得分:0)

由于日期和desc是键,因此在每个字段之前和之后添加反引号(`)。