2013-09-30 15 views
5

Tôi đã bị mắc kẹt về vấn đề này trong khoảng một giờ bây giờ, và tôi không thể giải quyết nó. Hãy giúp tôi!Lạ mắt MySQL TẠO TABLE hành vi

Đây là câu hỏi của tôi:

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

Làm thế nào là nó có thể truy vấn này làm việc trong PHPMyAdmin và trên dòng lệnh, nhưng không phải trong một kịch bản PHP? Đây là thứ 3 trong số 6 bảng cần được tạo. 2 công việc đầu tiên hoàn hảo, nhưng không có gì sau đó. Bất kỳ trợ giúp sẽ được đánh giá cao.

$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

Tin nhắn báo lỗi là gì? – Mihai

+0

hiển thị mã php của bạn –

+0

lỗi là gì? – zzlalani

Trả lời

0

Hãy thử loại bỏ các khóa lạ và thêm chúng sau này bằng ALTER TABLE.

+0

Cảm ơn, nhưng nó vẫn không hoạt động. Như tôi đã nói, truy vấn hoạt động như trên dòng lệnh và trong phpmyadmin. –

+0

Thật không may, vẫn không có gì. :( –

+0

Bất kỳ sự khác biệt nào trong phiên bản mysql? Ngoài ra, hãy kiểm tra UBUNTU nếu bảng đó có ở đó không. – Mihai

0

Nó đề cập đến thông báo lỗi của bạn, nhưng thường là loại lỗi này gây ra bởi các phím nước ngoài! có thể có sự khác biệt giữa cột khóa ngoài và tham chiếu. Ví dụ: có thể loại cột tham chiếu của bạn khác với khóa ngoại của bạn!

0

Ha ... Tắt các thay đổi tôi đã thực hiện trong không gian làm việc IDE của tôi không được phản ánh trong thư mục/www/của tôi (có thể là lỗi không đúng của Linux). Mã không chạy chính xác lần đầu tiên vì phiên bản MySQL mới hơn này dường như không cho phép các cột DATETIME có giá trị mặc định được trả về bởi hàm. Tuy nhiên, TIMESTAMP s vẫn có thể có giá trị mặc định là NOW(). Dù sao, cảm ơn tất cả mọi người.