错误 1064(42000)创建表 MySQL

错误 1064(42000)创建表 MySQL

我尝试建立自己的网站,并在我的网站上要求人们输入他们的名字并写一个小故事。完成后,他们点击提交,它将信息发送到我的数据库。我使用 MySQL,我想创建一个可以存储信息的表。这是我的 MySQL 代码:

CREATE TABLE names (
    name PRIMARY KEY NOT NULL,
    message NOT NULL,
    IPv4 NOT NULL,
    browser NOT NULL,
    date NOT NULL,
    time NOT NULL,
);

但是当我在命令提示符中输入此命令时,它显示:

ERROR 1064 (42000): 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 'PRIMARY KEY NOT NULL, message NOT NULL, 
    IPv4 NOT NULL, browser NOT NULL, date NO' at line 1

你能告诉我我做错了什么以及如何修复它吗?我不知道这是否有用,但我也包含了我的 PHP 脚本。由于我必须将变量翻译成英语,因此名称可能有点混乱。我的 PHP 代码是(我在创建表之前创建了它,正如您所见,我确实设法设置了我的数据库“名称”,而且我想将我的表称为“名称”):

$name = $_POST['name'];
$message = $_POST['message'];
$user = 'user';
$password = 'Login';
$host = 'localhost:3036';
$browser = $_SERVER['HTTP_USER_AGENT'];
$ip = $_SERVER["REMOTE_ADDR"];
date_default_timezone_set('UTC+1');
$date = date("Y-m-d");
$time = date("H:i:s");
$connect = mysql_connect($host, $user, $password);
if (! $connect)
{
    $error = mysql_error();
    print "Sorry, could not connect: $error";
}
print "Connected!";
$database = "USE names";
$table = "INSERT INTO names (name, message, IPv4, browser, date, time) VALUES ($name, $message, $ip, $browser, $date, $time)";
if (! $database)
{
    $error=mysql_error();
    echo "\nCould not find database! Error: $mysql_error";
}
if (! $table)
{
    $error=mysql_error();
    echo "\nCould not write to database! Error: $error";
}
$close = mysql_close($connect);
if (! $close )
{
    $error=mysql_error();
    echo "\nCould not close connection! Error: $error";
}
echo "\nBedankt $name!";

答案1

是的,你的最后一行不应该包含逗号,,因为它是最后一行,并且后面不会再有变量。所以代码应该是这样的:

CREATE TABLE names (
    name char(40) PRIMARY KEY NOT NULL,
    message varchar(100) NOT NULL,
    IPv4 char(50) NOT NULL,
    browser char(20) NOT NULL,
    date datetime NOT NULL,
    time int NOT NULL
);

请注意最后一行time NOT NULL末尾没有逗号。

MYSQL 的错误消息不太有用,它们大多告诉您需要再次阅读代码直到正确为止。

另外,您还没有告诉 MYSQL 这些字段中将包含什么类型的数据。是字符还是数字?您需要指定它,例如,data int primary keydata2 char(40) not null。对于 int,您不需要指定变量的长度,但对于 chars,您需要指定。

答案2

您对数据库的查询有错误 - 您无法放置,在之前)

但是INSERT值应该放在 之间',例如'value'。这是不必要的,但这是一种很好的做法。

您可以通过添加一些函数来“生成”您的查询implode,如下所示:

$data = array("name" => $_POST["name"]);
$into = implode(", ", array_keys($data));
$values = "'".implode("', '", $data)."'";
$query = "INSERT INTO user ($into) VALUES ($values);");

生成查询应该可以帮助您省略未来的语法错误。

相关内容