2017-10-04 109 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