PHP创建表错误1064

时间:2013-12-10 11:54:08

标签: php mysql syntax-error create-table

我正在尝试在mySQL中创建一个表。这是我下面的php页面,当我运行页面时没有错误但是表格不在mySQL中,当我在mySQL中测试代码时我收到了错误

  

#1064 - 您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   在第1行'$ user =“root”附近。

我已经对这个错误意味着什么做了一些研究但是我没有在哪里。我真的不明白这意味着什么。如果我是诚实的我真的不懂php我只是改编我在之前的uni教程中编写的代码。请帮忙。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>

<body>
<?php 
$user="root"; 
$password=""; 
$database="test"; 

mysql_connect('localhost',$user,$password)or die( "Unable to connect to server");
mysql_select_db($database) or die( "Unable to select database");
$query="CREATE TABLE Bookings 
(
id int(6) NOT NULL auto_increment, 
name varchar(25),
email varchar(35),
number varchar(20),
buffet varchar(3),
ceilidh varchar(5),
work1 varchar(3),
beg1 varchar(3),
int1 varchar(3),
adv1 varchar(3),
youth varchar(3),
lunch varchar(3),
beg2 varchar(3),
int2 varchar(3),
adv2 varchar(3),
dinner varchar(3),
dance varchar(5),
work2 varchar(3),
lunch2 varchar(3),
price varchar(5),
PRIMARY KEY  (ID)
)";

mysql_query($query); 
mysql_close(); 

?>
</body>
</html>

5 个答案:

答案 0 :(得分:2)

您需要转发int1int2。它们是reserved words in MySQL

CREATE TABLE Bookings 
(
    id int(6) NOT NULL auto_increment, 
    name varchar(25),
    email varchar(35),
    number varchar(20),
    buffet varchar(3),
    ceilidh varchar(5),
    work1 varchar(3),
    beg1 varchar(3),
    `int1` varchar(3),
    adv1 varchar(3),
    youth varchar(3),
    lunch varchar(3),
    beg2 varchar(3),
    `int2` varchar(3),
    adv2 varchar(3),
    dinner varchar(3),
    dance varchar(5),
    work2 varchar(3),
    lunch2 varchar(3),
    price varchar(5),
    PRIMARY KEY  (ID)
)

答案 1 :(得分:0)

您的列名存在问题

int1s varchar(3),

int2 varchar(3),

将其更改为其他内容或将其包含在反引号中。

喜欢这个......

CREATE TABLE Bookings 
(
id int(6) NOT NULL auto_increment, 
name varchar(25),
email varchar(35),
number varchar(20),
buffet varchar(3),
ceilidh varchar(5),
work1 varchar(3),
beg1 varchar(3),
`int1` varchar(3), /* see here... */
adv1 varchar(3),
youth varchar(3),
lunch varchar(3),
beg2 varchar(3),
`int2` varchar(3), /* see here... */
adv2 varchar(3),
dinner varchar(3),
dance varchar(5),
work2 varchar(3),
lunch2 varchar(3),
price varchar(5),
PRIMARY KEY  (ID)
)

答案 2 :(得分:0)

您正在为列名使用保留字。 检查以下指向mysql参考的链接:

http://dev.mysql.com/doc/refman/5.7/en/reserved-words.html

答案 3 :(得分:0)

不要对列名使用任何保留字。您需要更改列名称 int1 int2 ,因为它们是保留字。有关更多保留字,请参阅@Alex Vogt提供的链接。

答案 4 :(得分:0)

您需要了解PHP和SQL之间的区别。

您不能将<?php?>之间的所有内容都放入mysql中。这是PHP的一部分。在PHP中,您将连接到MYSQL服务器并向该服务器发送查询。我认为你确实拿走了所有内容,因为你的错误指定了near '$user = "root"' at line 1

如果您想测试查询,只需在$query = "";之间进行部分,然后将其粘贴到mysql中以测试查询。

所以这只是这部分:

CREATE TABLE Bookings 
(
id int(6) NOT NULL auto_increment, 
name varchar(25),
email varchar(35),
number varchar(20),
buffet varchar(3),
ceilidh varchar(5),
work1 varchar(3),
beg1 varchar(3),
int1 varchar(3),
adv1 varchar(3),
youth varchar(3),
lunch varchar(3),
beg2 varchar(3),
int2 varchar(3),
adv2 varchar(3),
dinner varchar(3),
dance varchar(5),
work2 varchar(3),
lunch2 varchar(3),
price varchar(5),
PRIMARY KEY  (ID)
)

一旦你这样做,juergen的答案可能适用:逃避int1int2,将其更改为`int1``int2`以逃避保留的关键字。