创建表时出错:您的SQL语法出错;

时间:2017-10-26 18:22:34

标签: mysql

我正在尝试使用此功能在我的数据库中创建一些表。

但是我收到了这个错误:

创建表时出错:SQL语法中有错误;查看与MariaDB服务器版本对应的手册,以便在'UNSIGNED AUTO_INCREMENT,ip VARCHAR(65)NOT NULL附近使用正确的语法,在第2行尝试INT(11)'

就此:

$dbprefix = 'duh_';
$prefixloginAttempts = $dbprefix . 'loginAttempts';

$table = array();

$table[] = "CREATE TABLE IF NOT EXISTS $prefixloginAttempts (
    id              INT(11)     NOT NULL UNSIGNED AUTO_INCREMENT,
    ip              VARCHAR(65) NOT NULL,
    attempts        INT(11)     NOT NULL,
    lastLogin       DATETIME    NOT NULL,
    username        VARCHAR(65) NOT NULL,
    mod_timestamp   TIMESTAMP   NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY                     ('id'),
    UNIQUE KEY 'id_UNIQUE'          ('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;";

foreach ($table as $sql) {
    $query = $conn->query($sql);
}

有人能看到失败的地方吗?我不能......

1 个答案:

答案 0 :(得分:1)

MySQL提供的错误消息包含解析停止的部分查询。错误通常出现在... near "..."消息中列出的查询部分的第一个单词上,或者就在它之前。

在此查询中,问题出在UNSIGNED关键字上。它是data type的一部分,必须在INT(11)之后保持正确:

id              INT(11)     UNSIGNED NOT NULL AUTO_INCREMENT,

了解CREATE TABLE statement的语法。

索引的定义也有错误。列名用撇号括起来,这使它们成为字符串而不是对象名。

对象名称可以不加引号,如果它们也是SQL keywords or MySQL reserved words,那么它们必须用反引号(`)括起来:

PRIMARY KEY                     (id),
UNIQUE KEY id_UNIQUE            (id)

PRIMARY KEY                     (`id`),
UNIQUE KEY `id_UNIQUE`          (`id`)

阅读when to use single quotes, double quotes or backticks in MySQL