2017-10-04 60 views
0

我有它成立时,我的表创建呼应,但用户表是不会,我已经看了多个解决方案,但它们都没有在这里帮助我的代码MySQL不会创建表

<? 
    phpinclude_once("index.php"); 
    $tbl_users = "CREATE TABLE IF NOT EXISTS users 
        (
         id INT(11) NOT NULL AUTO_INCREMENT, 
         username VARCHAR(16) NOT NULL, 
         email VARCHAR(64) NOT NULL, 
         password VARCHAR(64) NOT NULL, 
         gender ENUM('m','f') NOT NULL, 
         website VARCHAR(64) NULL, 
         country VARCHAR(64) NULL, 
         userlevel ENUM('a','b','c','d') NOT NULL DEFAULT a, 
         avatar VARCHAR(64) NULL, 
         ip VARCHAR(64) NOT NULL, 
         signup DATETIME NOT NULL, 
         lastlogin DATETIME NOT NULL, 
         notescheck DATETIME NOT NULL, 
         activated ENUM('0','1') NOT NULL DEFAULT 0, 
         PRIMARY KEY (id)), 
         UNIQUE KEY username (username,email))"; 
    $query = mysqli_query($db_spooky, $tbl_users); 

    if ($query === TRUE) 
    { 
     echo "<h3>user table created OK :) </h3>"; 
    } 
    else 
    { 
     echo "<h3>user table NOT created :(</h3>"; 
    } 
?> 
+1

最新错误? –

+2

请正确格式化您的代码。这很难阅读,而且会引入语法错误。 – aynber

+0

您的查询中有太多的右括号。 – aynber

回答

1
CREATE TABLE IF NOT EXISTS users (id INT(11) NOT NULL AUTO_INCREMENT 
            ,username VARCHAR(16) NOT NULL 
            ,email VARCHAR(64) NOT NULL,password VARCHAR(64) NOT NULL 
            ,gender ENUM('m','f') NOT NULL 
            ,website VARCHAR(64) NULL 
            ,country VARCHAR(64) NULL 
            ,userlevel ENUM('a','b','c','d') NOT NULL DEFAULT 'a' 
            ,avatar VARCHAR(64) NULL 
            ,ip VARCHAR(64) NOT NULL 
            ,signup DATETIME NOT NULL 
            ,lastlogin DATETIME NOT NULL 
            ,notescheck DATETIME NOT NULL,activated ENUM('0','1') NOT NULL DEFAULT 0 
            ,PRIMARY KEY (id) 
            ,UNIQUE KEY username (username,email)) 

学会整理你的代码,而不是把它写成一行和两行,而ENUM的默认值需要用单引号引起来,并且你有一个额外的右括号。上面的代码是正确的版本。

+2

我通常建议反对ENUM。对(相对)静态查找表的引用要好得多,并且在添加新值时不需要更改表(必须在“幕后”重新创建整个表)。您在关于默认值的评论中涉及ENUM的另一个问题; 'DEFAULT 0'是“可接受的”......并且对于'userlevel'和'gender'字段也是如此,导致默认值是枚举列表中的索引0处的值...可能会导致如果它被声明为ENUM('1','0'),那么在'activated'中有一些重大混淆。 – Uueerdo