簡體   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