2013-09-30 2 views
5

약 1 시간 동안이 문제로 고생했지만 해결할 수 없습니다. 도와주세요!이상한 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 번째 테이블입니다. 처음 2 개는 완벽하게 작동하지만 이후에는 아무 것도 작동하지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

$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 멍청한 실수 일 가능성이 있음). 이 새로운 버전의 MySQL에서는 분명히 DATETIME 열이 함수에 의해 반환 된 기본값을 가질 수 없기 때문에 처음에는 코드가 올바르게 실행되지 않았습니다. 그래도 TIMESTAMP의 기본값은 NOW() 일 수 있습니다. 어쨌든, 다들 고마워.