2013-07-15 22 views
0

我不斷收到此錯誤:爲什麼當我的列名中有空格時,查詢會中斷?

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Name int(10) NOT NULL, Middle Name varchar(10) NOT NULL, Last Name varch' at line 2

而且我不確定我做了什麼錯誤...

<?php 
mysql_connect('klaic.db.11427125.hostedresource.com', 'klaic', '*******') 
or die (mysql_error()); 
mysql_select_db('klaic') 
or die (mysql_error()); 
mysql_query("create table account(
    Fist Name int(10) NOT NULL, 
    Middle Name varchar(10) NOT NULL, 
    Last Name varchar(10) NOT NULL, 
    Email varchar(55) NOT NULL, 
    Comfirm Email varchar(55) NOT NULL, 
    D.O.B varchar(10) NOT NULL, 
    ID int(11) NULL, 
    PRIMARY KEY (ID) 
)") or die (mysql_error()); 
echo "Complete."; 
?> 
+6

逃到名稱不能有空格 - 他們將只如果添加反引號'' –

+3

不要米錯了,但是你在哪裏讀過那些列名可以包含空格或點?如果它是一個教程,你可以請分享鏈接? –

+0

列名應該使用下劃線來分隔單詞,在列名中使用標點符號也不是一個好主意。 –

回答

4

如果你將有空格的列名,這是不是一個好主意,你需要把它們包裝在蜱中:

mysql_query("create table account(
    `Fist Name` int(10) NOT NULL, 
    `Middle Name` varchar(10) NOT NULL, 
    `Last Name` varchar(10) NOT NULL, 
    `Email` varchar(55) NOT NULL, 
    `Comfirm Email` varchar(55) NOT NULL, 
    `D.O.B` varchar(10) NOT NULL, 
    `ID` int(11) NULL, 
    PRIMARY KEY (ID) 
)") or die (mysql_error()); 
+0

我認爲一個更好的主意是完全避開空格。就個人而言,反駁讓我瘋狂。 – Strawberry

+0

我同意@Strawberry。事實上,每個鍵盤佈局中都沒有反引號(例子:意大利佈局不包括它們),並且爲了得到反引號,我需要爲它們中的每一個鍵入「Alt + 0096」。在這個查詢中,我需要56個按鍵來分隔字符串以代替3個下劃線。 –

+0

我不認爲有人會認爲列名中的空格是一件壞事。我甚至在我的答案的第一行中這樣說。用戶可以決定他們是否認爲這是一個很好的解決方案,或者他們應該改變他們的列命名約定。 –

0

親愛的只是要記住,當你給列名稱donot給它的空間。例如,如果你想使表字段名「名」這將是要麼「FIRST_NAME」或「姓」 所以你可能會像在SQL語句如果

<?php 
mysql_connect('klaic.db.11427125.hostedresource.com', 'klaic', '*******') 
or die (mysql_error()); 
mysql_select_db('klaic') 
or die (mysql_error()); 
mysql_query("create table account(
    Fist_Name int(10) NOT NULL, 
    Middle_Name varchar(10) NOT NULL, 
    Last_Name varchar(10) NOT NULL, 
    Email varchar(55) NOT NULL, 
    Comfirm_Email varchar(55) NOT NULL, 
    D.O.B varchar(10) NOT NULL, 
    ID int(11) NULL, 
    PRIMARY KEY (ID) 
)") or die (mysql_error()); 
echo "Complete."; 
?> 
1

使用口音`列名你使用空格。正確的SQL語句是:

SELECT * FROM `account` WHERE create table account(
    `First Name` int(10) NOT NULL, 
    `Middle Name` varchar(10) NOT NULL, 
    `Last Name` varchar(10) NOT NULL, 
    `Email` varchar(55) NOT NULL, 
    `Comfirm Email` varchar(55) NOT NULL, 
    `D.O.B` varchar(10) NOT NULL, 
    `ID` int(11) NULL, 
    PRIMARY KEY (ID) 
) 

提示:

  1. 不要在列名空格和大寫字母!
  2. ID應該是「自動遞增」
  3. 應該First Name(你迷失在你的聲明一個字母;))是INT?
+1

2.不一定:它可能以某種方式與另一個表相關。 (無論如何,我仍然認爲這應該是autoincremental在這個例子中) –

+0

我覺得是一樣的,所以我指出了它。 –

2

作爲Schema Object Names下記載:

Certain objects within MySQL, including database, table, index, column, alias, view, stored procedure, partition, tablespace, and other object names are known as identifiers.

[ deletia ]

Identifiers are converted to Unicode internally. They may contain these characters:

  • Permitted characters in unquoted identifiers:

    • ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore)

    • Extended: U+0080 .. U+FFFF

  • Permitted characters in quoted identifiers include the full Unicode Basic Multilingual Plane (BMP), except U+0000:

    • ASCII: U+0001 .. U+007F

    • Extended: U+0080 .. U+FFFF

[ deletia ]

The identifier quote character is the backtick (「 ` 」):

因此,包括在一列中的名字空間/點/等(其通常是一個壞主意),必須報價反引號標識符

CREATE TABLE account (
    `Fist Name` int(10) NOT NULL, 
    `Middle Name` varchar(10) NOT NULL, 
    `Last Name` varchar(10) NOT NULL, 
    `Email` varchar(55) NOT NULL, 
    `Comfirm Email` varchar(55) NOT NULL, 
    `D.O.B` varchar(10) NOT NULL, 
    `ID` int(11) NULL, 
    PRIMARY KEY (ID) 
) 
相關問題