这个MySQL语法有什么问题?

时间:2011-03-30 04:52:53

标签: php mysql

INSERT INTO homework_MarcWed30-2011 ('Teacher', 'Class', 'Period', 'Assn') 
                              VALUES ('a', 'a', 'a', 'a')

我收到以下错误:

  

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'-2011(教师varchar(30),Class varchar(30),Period varchar(30),Assn varchar('at line 1

)附近使用正确的语法

发生了什么事?

在旁注中,create table语句对我不起作用:

mysql_query("CREATE TABLE homework_MarcWed30-2011 (Teacher varchar(30), Class varchar(30), Period varchar(30), Assn varchar(400))","mysql_connect('#####', '#####', '#####')") OR die(mysql_error());

6 个答案:

答案 0 :(得分:1)

使用

`homework_MarcWed30-2011`   
在表名中

并使用`来引用列名

INSERT INTO homework_MarcWed30-2011 (`Teacher`, `Class`, `Period`, `Assn`) 
                              VALUES ('a', 'a', 'a', 'a')
  

可以引用标识符或   不带引号的。如果标识符包含   特殊字符或是保留的   一句话,你必须随时引用它   参考它。一组字母数字   当前角色的字符   设置,“_”和“$”并不特殊。

http://dev.mysql.com/doc/refman/5.0/en/identifiers.html

答案 1 :(得分:0)

尝试此查询

INSERT INTO `homework_marcwed30-2011` (`Teacher` ,`Class` ,`Period` ,`Assn`) VALUES ('a', 'a', 'a', 'a');

变体,没有字段引号

INSERT INTO `homework_marcwed30-2011` (Teacher ,Class ,Period ,Assn)
VALUES ('a', 'a', 'a', 'a')

变体,没有字段定义

INSERT INTO `homework_marcwed30-2011` VALUES ('a', 'a', 'a', 'a')

表格创建部分

mysql_query("CREATE TABLE `homework_MarcWed30-2011` (Teacher varchar(30) NOT NULL, Class varchar(30) NOT NULL, Period varchar(30) NOT NULL, Assn varchar(400) NOT NULL);","mysql_connect('#####', '#####', '#####')") OR die(mysql_error());

您的错误是您没有定义是否允许Null。

答案 2 :(得分:0)

列名应该没有引号,它们可以被后引号``包围,但不能用单引号或双引号包围。

 INSERT INTO `homework_MarcWed30-2011` (`Teacher`, `Class`, `Period`, `Assn`)
 VALUES ('a', 'a', 'a', 'a')

如果有 - 在表名中你仍然可以使用后面引号``。

中的周围名称

答案 3 :(得分:0)

首先,我认为你不能在表名中加上“ - ”。不确定那个,但这是基于近'-2011'评论的建议。 (或如上所述,通过反引号包围它)......这是更好的选择!)

其次,第二个会死,因为你有一个PHP语法错误:

mysql_query(""...", "mysql_connect(...)") OR die(msyql_error());

第一个参数有两个开头的引号:表示字符串已经开始和结束。删除一个。

如果我没有查阅文档,我相信第二个参数需要资源,如果我没记错的话。你发送一个字符串。尝试删除引号。

答案 4 :(得分:0)

您不能在表名中使用短划线作为裸字符串。相反,如果您使用下划线,它将正常工作:

mysql> CREATE TABLE homework_MarcWed30_2011 (Teacher varchar(30), Class varchar(30), Period varchar(30), Assn varchar(400));
Query OK, 0 rows affected (0.09 sec)

在insert语句中,您不能使用引号作为列名,如果要插入所有列,则根本不需要列出它们:

mysql> INSERT INTO homework_MarcWed30_2011 VALUES ('a', 'a', 'a', 'a');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO homework_MarcWed30_2011 (Teacher, Class, Period, Assn) VALUES ('b', 'b', 'b', 'b')

答案 5 :(得分:0)

答案太多,而不是单一的答案

反击会做魔术

INSERT INTO `homework_MarcWed30-2011` (`Teacher`, `Class`, `Period`, `Assn`) 
                          VALUES ('a', 'a', 'a', 'a')

但是,作为一般规则,请提供您的标识符不那么花哨但明智的名称

CREATE TABLE homework (
  teacher varchar(30), 
  class varchar(30), 
  period varchar(30),
  assn text
)

将它们保持为小写字母小写将为您节省很多麻烦