2014-12-04 6 views
4

Я имею трудность при создании таблицы с MySQL (ПДО) с внешним ключом элементом, без внешнего ключа таблицы создает хорошо, но не я получаю сообщение:PDO создает таблицу с внешним ключом

SQLSTATE [42000]: Синтаксическая ошибка или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL;

Я попытался найти решение и адаптировать код, но, похоже, все время сталкивался с этим. Есть ли исправление, или я являюсь wally?

<?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 Абсолютно так, для временных таблиц это определенно имеет смысл , но для таблиц многократного использования - с точки зрения разработчика - мне было бы намного легче проектировать и строить таблицу в графическом интерфейсе :) – silkfire

ответ

2

PRIMARY KEY в определении столбца является сокращением для определения отдельно который читает PRIMARY KEY (`column_name`)

FOREIGN KEY не имеет такого сокращенную.

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

Обратите внимание, что вы пренебрегли имя столбца для указанной таблицы, и вы, вероятно, следуешь также иметь ON DELETE и ON UPDATE параметров тоже.

+0

Спасибо Ните Темный Абсолют, я попробовал это и теперь обнаружил еще одну ошибку. Я начинающий разработчик, так что у меня есть терпение :-) Ошибка на этот раз: SQLSTATE [HY000]: Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа – Gareth

+0

Привет, возможно, это не могло быть проблемой, но все еще упоминается, столбец, который вы собираетесь для добавления в качестве внешнего ключа необходимо индексировать. –

Смежные вопросы