当我的列名中有空格时,为什么我的查询会中断?

时间:2013-07-15 15:00:59

标签: php mysql sql

我一直收到这个错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在'Name int(10)NOT NULL,Middle Name varchar(10)NOT NULL,Last Name varch'第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.";
?>

4 个答案:

答案 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());

答案 1 :(得分:2)

正如Schema Object Names所述:

  

MySQL中的某些对象,包括数据库,表,索引,列,别名,视图,存储过程,分区,表空间和其他对象名称都称为标识符。

[ deletia ]
     

标识符在内部转换为Unicode。它们可能包含以下字符:

     
      
  • 不带引号的标识符中允许的字符:

         
        
    • ASCII:[0-9,a-z,A-Z $ _](基本拉丁字母,数字0-9,美元,下划线)

    •   
    • 扩展:U + 0080 .. U + FFFF

    •   
  •   
  • 带引号的标识符中允许的字符包括完整的Unicode基本多语言平面(BMP),但U + 0000除外:

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

    •   
    • 扩展:U + 0080 .. U + FFFF

    •   
  •   
[ deletia ]
     

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

因此,要在列名中包含空格/点/等(这通常是一个坏主意),必须引用 反引号中的标识符

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

答案 2 :(得分:1)

如果使用空格,请在SQL语句的列名中使用重音符号。正确的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吗?

答案 3 :(得分:0)

亲爱的,请记住,当您给列名称时,donot会给它留出空间。例如,如果要使表字段名称为“First Name”,则它将是“First_name”或“FirstName” 所以你可能会那样

<?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.";
?>