PHP创建表错误1064


PHP create table error 1064

我正在尝试在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>

您需要转义int1int2。它们是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)
)

您的列名有问题

int1s varchar(3),

int2 varchar(3),

将其更改为其他内容或将其包含在backticks中。

像这样。。。

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

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

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

不要在列名中使用任何保留字。您需要更改列名int1int 2,因为它们是保留字。欲知更多保留字,请查看@Alex Vogt提供的链接。

您需要了解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 d的答案可能适用:通过将int1int2更改为`int1``int2`来转义保留关键字,从而转义它们。