SQL CREATE TABLE错误

时间:2011-01-09 14:49:05

标签: mysql zend-framework authentication

答案是我使用了不正确的引号而不是反引号。愚蠢的语法hilighter欺骗了我。

在过去的半小时里,我一直坚持这个简单的事情,所以我想我可以尝试在这里快速回答。

假设我使用的是mysql 5.1

,我的SQL语法究竟是什么不正确
CREATE TABLE 'users' (
    'id' INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    'username' VARCHAR(20) NOT NULL,
    'password' VARCHAR(40) NOT NULL,
    'salt' VARCHAR(40) DEFAULT NULL,
    'email' VARCHAR(80) NOT NULL,
    'created_on' INT(11) UNSIGNED NOT NULL,
    'last_login' INT(11) UNSIGNED DEFAULT NULL,
    'active' TINYINT(1) UNSIGNED DEFAULT NULL,
) 
ENGINE InnoDB;

我得到的错误是:

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 ''users';

CREATE TABLE 'users' (
    'id' INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,' at line 3


Elapsed Time:  0 hr, 0 min, 0 sec, 0 ms.

另外,有没有人有关于如何使用Zend_Auth完成新手的好教程?

感谢。

2 个答案:

答案 0 :(得分:5)

使用反引号引用表和列标识符(如果已配置,则引用双引号)。

此外,列列表末尾有逗号。

CREATE TABLE `users` (
    `id` MEDIUMINT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `username` VARCHAR( 20 ) NOT NULL,
    `password` VARCHAR( 40 ) NOT NULL,
    `salt` VARCHAR( 40 ) DEFAULT NULL,
    `email` VARCHAR( 80 ) NOT NULL,
    `created_on` INT( 11 ) UNSIGNED NOT NULL,
    `last_login` INT( 11 ) UNSIGNED DEFAULT NULL,
    `active` TINYINT( 1 ) UNSIGNED DEFAULT NULL
) ENGINE InnoDB

答案 1 :(得分:2)

您使用单引号代替表格和字段名称的反引号,这是错误的。 ENGINEInnoDB之间也应该有一个等号。

这是修复的SQL:

CREATE TABLE `users` (
    `id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `username` VARCHAR(20) NOT NULL,
    `password` VARCHAR(40) NOT NULL,
    `salt` VARCHAR(40) DEFAULT NULL,
    `email` VARCHAR(80) NOT NULL,
    `created_on` INT(11) UNSIGNED NOT NULL,
    `last_login` INT(11) UNSIGNED DEFAULT NULL,
    `active` TINYINT(1) UNSIGNED DEFAULT NULL
) 
ENGINE = InnoDB;