2013-09-30 105 views
5

我一直在這個問題上停留了大約一個小時,我無法解決它。請幫忙!奇怪的MySQL CREATE TABLE行爲

這裏是我的查詢:

CREATE TABLE IF NOT EXISTS snippets (
    id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    title VARCHAR(255) NOT NULL, 
    description TEXT NOT NULL, 
    code TEXT NOT NULL, 
    lang_id INT(3) UNSIGNED NOT NULL, 
    dev_id INT(11) UNSIGNED NOT NULL, 
    post_date TIMESTAMP NOT NULL DEFAULT NOW(), 
    views INT UNSIGNED NOT NULL DEFAULT 0, 
    FOREIGN KEY (lang_id) REFERENCES languages (id), 
    FOREIGN KEY (dev_id) REFERENCES developers (id), 
    PRIMARY KEY (id) 
); 

這怎麼可能,這個查詢在phpMyAdmin,並在命令行上工作,但不是在PHP腳本?這是應該創建的6個表格中的第3個。前兩個完美的工作,但沒有任何後。任何幫助,將不勝感激。

$link = new PDOConfig(); 

$link->query("CREATE DATABASE IF NOT EXISTS ratemycode"); 

$link->connect($link, 'ratemycode'); 

$queries['tables'] = array(
    "CREATE TABLE IF NOT EXISTS developers (
     id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
     username VARCHAR(42) NOT NULL, 
     password VARCHAR(64) NOT NULL, 
     email VARCHAR(255) NOT NULL, 
     PRIMARY KEY (id) 
    )", 
    "CREATE TABLE IF NOT EXISTS languages (
     id INT(3) UNSIGNED NOT NULL AUTO_INCREMENT, 
     name VARCHAR(42) NOT NULL, 
     PRIMARY KEY (id) 
    )", 
    "CREATE TABLE IF NOT EXISTS snippets (
     id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
     title VARCHAR(255) NOT NULL, 
     description TEXT NOT NULL, 
     code TEXT NOT NULL, 
     lang_id INT(3) UNSIGNED NOT NULL, 
     dev_id INT(11) UNSIGNED NOT NULL, 
     post_date TIMESTAMP NOT NULL DEFAULT NOW(), 
     views INT UNSIGNED NOT NULL DEFAULT 0, 
     FOREIGN KEY (lang_id) REFERENCES languages (id), 
     FOREIGN KEY (dev_id) REFERENCES developers (id), 
     PRIMARY KEY (id) 
    )", 
    "CREATE TABLE IF NOT EXISTS comments (
     id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
     body TEXT NOT NULL, 
     post_date TIMESTAMP NOT NULL DEFAULT NOW(), 
     snip_id INT(11) UNSIGNED NOT NULL, 
     dev_id INT(11) UNSIGNED NOT NULL, 
     FOREIGN KEY (snip_id) REFERENCES snippets (id), 
     FOREIGN KEY (dev_id) REFERENCES developers (id), 
     PRIMARY KEY (id) 
    )", 
    "CREATE TABLE IF NOT EXISTS upvotes (
     id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
     snip_id INT(11) UNSIGNED NOT NULL, 
     dev_id INT(11) UNSIGNED NOT NULL, 
     FOREIGN KEY (snip_id) REFERENCES snippets (id), 
     FOREIGN KEY (dev_id) REFERENCES developers (id), 
     PRIMARY KEY (id) 
    )", 
    "CREATE TABLE IF NOT EXISTS downvotes (
     id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
     snip_id INT(11) UNSIGNED NOT NULL, 
     dev_id INT(11) UNSIGNED NOT NULL, 
     FOREIGN KEY (snip_id) REFERENCES snippets (id), 
     FOREIGN KEY (dev_id) REFERENCES developers (id), 
     PRIMARY KEY (id) 
    )" 
); 
foreach ($queries['tables'] as $table) { 
    $link->query($table); 
} 
+0

什麼是錯誤信息? – Mihai

+0

顯示你的php代碼 –

+0

是什麼錯誤? – zzlalani

回答

0

嘗試刪除外鍵並稍後使用ALTER TABLE添加它們。

+0

謝謝,但它仍然沒有工作。正如我所說的,查詢在命令行和phpmyadmin中的工作原理。 –

+0

不幸的是,仍然沒有。 :( –

+0

mysql版本有什麼不同?還有,在UBUNTU上檢查是否有這個表。 – Mihai

0

它引用了你的錯誤信息,但通常這種錯誤是由外鍵造成的! 也許外鍵列和引用之間存在差異。例如 可能您的參考列類型與您的外鍵不同!

0

Ha ...原來我在IDE工作區中所做的更改未反映在我的/ www /目錄中(可能是Linux noob錯誤)。代碼第一次運行不正確,因爲這個較新版本的MySQL顯然不允許DATETIME列具有函數返回的默認值。雖然,TIMESTAMP s仍然可以具有默認值NOW()。無論如何,感謝一羣人。