2011-01-09 191 views
4

答案是我使用了不正確的引號而不是反引號。愚蠢的語法hilighter欺騙了我。SQL CREATE TABLE錯誤

我一直堅持在這一個簡單的(ish)事情的最後半小時,所以我想我可能會嘗試在這裏得到一個快速的答案。

究竟什麼是不正確我的SQL語法,假設我使用的MySQL 5.1

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完成noobs?

感謝。

+0

什麼是錯誤? – 2011-01-09 14:54:46

+0

爲什麼要使用back-ticks?如果你問我 – 2011-01-09 15:26:54

回答

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