繁体   English   中英

这种MySQL语法有什么问题?

[英]What is wrong with this MySQL syntax?

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

我收到以下错误:

您的SQL语法有误; 检查与您的MySQL服务器版本相对应的手册以获取在'-2011附近使用的正确语法(Teacher varchar(30),Class varchar(30),Period varchar(30),Assn varchar('在第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());

采用

`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

试试这个查询

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。

列名应该用引号引起来,它们可以用反引号``括起来,但不能用单引号或双引号引起来。

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

如果在表名中有-,您仍然可以在反引号``周围使用名字。

首先,我认为表名称中不能包含“-”。 不确定那一项,但这是基于近乎“ -2011”评论的建议。 (或如上所述,通过反引号将其包围)...这是更好的选择!)

其次,第二个将死亡,因为您有一个PHP语法错误:

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

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

而且,如果我没有记错的话,我相信不用看文档,第二个参数就需要资源。 您正在发送一个字符串。 尝试删除引号。

您不能在表格名称中使用破折号作为裸字符串。 相反,如果您使用下划线,它将可以正常工作:

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)

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

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')

答案太多而不是一个正确的答案

倒钩会做魔术

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
)

保留字母数字小写将为您节省许多麻烦

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM