2014-12-04 4 views
4
이 메시지를 얻을 나는 내가 표를 잘 작성 외래 키하지 않고, 외래 키 요소와 어려움이 MySQL을 (PDO)와 테이블을 생성을 가진, 그러나없이하고

:는 PDO가있는 테이블을 생성 외래 키

SQLSTATE를 [42000] : 구문 오류 또는 액세스 위반 : 1064 SQL 구문에 오류가 있습니다.

나는 솔루션을 검색하고 코드를 적용하려고했지만이 문제를 계속 해결할 것으로 보인다. 수정이 있습니까? 아니면 제가 월계관입니까? 열의 정의

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = NULL; 
$dbname = "testapplciants"; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


    //sql to create the activity registered table 
    $sql = "CREATE TABLE Activity_Register (
    Activity_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    participant_id INT(6) FOREIGN KEY (participant_id) REFERENCES participants, 
    entry_number INT(2), 
    recorded_result INT(6), 
    entry_date TIMESTAMP 

    )"; 

    // use exec() because no results are returned 
    $conn->exec($sql); 
    echo "Table Activity Recorder created successfully"; 
    } 
catch(PDOException $e) 
    { 
    echo $sql . "<br>" . $e->getMessage(); 
    } 

$conn = null; 
?> 
+0

PHP 코드로 테이블을 만드는 이유는 무엇입니까? 프로젝트에서 데이터베이스 뷰어에 액세스하기 전에 데이터베이스 뷰어로 프로젝트를 만드는 것이 더 실용적이지 않습니까? – silkfire

+0

@silkfire이 경우 당신의 정서에 동의하지만, 'CREATE TEMPORARY TABLE'과 관련된 더 복잡한 응용 프로그램을 다루는 경우에는 그러한 것들을 아는 것이 유용 할 수 있습니다.) –

+0

@NiettheDarkAbsol 당연히 임시 테이블의 경우 확실히 이해할 수 있습니다 , 재사용 가능한 테이블을 위해 - 개발자 관점에서 - 나는 GUI로 테이블을 디자인하고 구성하는 것이 훨씬 쉽다는 것을 알게되었다. :) – silkfire

답변

2

PRIMARY KEY 는 그러한 속기 없다 PRIMARY KEY (`column_name`)

FOREIGN KEY 읽는 별도 정의 속기이다. 당신이 참조 된 테이블의 열 이름을 무시, 당신은 아마도 너무 ON DELETEON UPDATE 매개 변수를해야

`participant_id` INT(6), 
FOREIGN KEY (`participant_id`) REFERENCES `participants` (`id???`) 

참고.

+0

감사합니다. Niet the Dark Absol, 나는 그것을 시도했지만 이제 다른 오류를 밝혀 냈습니다. 나는 초보 개발자이므로 다음과 같이 인내심을 가지고있다 :-) 오류 : SQLSTATE [HY000] : 일반 오류 : 1215 외래 키 제약 조건을 추가 할 수 없다. – Gareth

+0

안녕하세요, 아마도이 문제는 아니지만 여전히 언급 할 수는 없습니다. 외래 키로 추가하려면 색인을 생성해야합니다. –

관련 문제