2014-12-28 3 views
0

Я видел много такого же вопроса, но я не мог решить свой вопрос.Невозможно создать таблицу (errno: 150) на FOREIGN KEY

Если я запускаю этот код:

<?php 
include_once($_SERVER['DOCUMENT_ROOT'].'/config.php'); 

$servername = HOST; 
$username = USERNAME; 
$password = PASSWORD; 
$dbname = DB; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

// sql to create table 
$sql = "CREATE TABLE IF NOT EXISTS Articls (
      id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
      name VARCHAR(254) COLLATE utf8_persian_ci NOT NULL  
) DEFAULT COLLATE utf8_persian_ci"; 

if ($conn->query($sql) === TRUE) { 
    echo "Table Articls created successfully"; 
} else { 
    echo "Error creating table: " . $conn->error; 
} 

///////////////////////////////////////////////////////////////////////// 

$sql = "CREATE TABLE IF NOT EXISTS Tags (
      id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
      id_articls INT(10) UNSIGNED NOT NULL, 
      name VARCHAR(256) COLLATE utf8_persian_ci NOT NULL,   
      FOREIGN KEY(Tags.id_articls) REFERENCES Articls(Articls.id)   
) DEFAULT COLLATE utf8_persian_ci"; 

if ($conn->query($sql) === TRUE) { 
    echo "Table Tags created successfully"; 
} else { 
    echo "Error creating table: " . $conn->error; 
} 

$conn->close(); 
?> 

Я получаю эту ошибку: (Если удалить FOREIGN KEY это работает)

Table Articls created successfully Error creating table: Can't create table 'admin_wepar.Tags' (errno: 150)

Редактировать

Если изменение into Articls.id и Tags.id_articls Я получил (а) эту ошибку:

Table Articls created successfullyError creating table: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOREIGN KEY (Tags.id_articls) REFERENCES Articls(Articls.id)) DEFAULT COLLA' at line 5

+0

Вы сначала создать таблицу заявление потерпит неудачу из-за запятой на второй строке. –

+0

Вы правы, но исходный код верен ... Я также исправил здесь –

+0

Вы также используете 'create table if not exists', поэтому вы не знаете, действительно ли создается таблица. Попробуйте снова сбросить таблицу и запустить код. –

ответ

0

Tags.id_articls является подписано целое число в то время как Articl.id является беззнаковое целое число. MySQL требует, чтобы поле ссылки было точно таким же типом. Сделайте Tags.id_articls неподписанным, чтобы он работал.

Кроме того, имена таблиц в списках столбцов в MySQL не допускаются. Всегда ясно, какая таблица имеет в виду: сначала , ссылаясь на таблицу, а затем на таблицу , на которую ссылается. Меняем

FOREIGN KEY(Tags.id_articls) REFERENCES Articls(Articls.id) 

в

FOREIGN KEY(id_articls) REFERENCES Articls(id) 

и он будет работать.

+0

Я изменил код на «id_articls INT (10) UNSIGNED NOT NULL», но я получаю последнюю ошибку (проверьте мой отредактированный вопрос « –

+0

@aliraha: Я обновил свой ответ, чтобы решить оставшуюся проблему. –

0

Вы должны объявить как Articls.id и Tags.id_articls знаком или без знака

+0

Я меняю его, но я получаю последний error (проверить мой отредактированный вопрос «pls –

+0

Beats me, я скопировал ваш код sql в mysql (за исключением создания id_articls без знака), и это сработало для меня. – Lennart

+0

Вы должны отредактировать свой вопрос, чтобы он содержал правильный тип для id_articls. – Lennart