Невозможно вставить значение внешнего ключа - PullRequest
0 голосов
/ 29 марта 2011

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

CREATE TABLE IF NOT EXISTS users (
  userID smallint(7) NOT NULL auto_increment,
  email varchar(60) collate utf8_unicode_ci NOT NULL default '',
  PRIMARY KEY  (userID),
  UNIQUE KEY email (email)
) ENGINE=INNODB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


CREATE TABLE IF NOT EXISTS photos (
 photoID MEDIUMINT(7) NOT NULL AUTO_INCREMENT,
 userID SMALLINT(7),
 title       VARCHAR(150),
 brief    TEXT,
 PRIMARY KEY(photoID),
 INDEX (userID),
 FOREIGN KEY (userID)
 REFERENCES users(userID)
 ) ENGINE=INNODB; 

И команда sql, которую я использовал для вставки информации в таблицу фотографий

$sql = "INSERT INTO photos (userID ,title, brief)".
       "VALUES ('$uid', '$title','$bodytext')";

Даже если $uid заменен статическим числом, таким как '2', которое существует впользовательская таблица (userID), она все еще не может быть вставлена.

Я воспользовался некоторыми советами, чтобы добавить функцию mysql_error, однако она ничего не показывает ...

$sql = "INSERT INTO photos (userID ,title, brief)".
       "VALUES ('2', '$title','$bodytext')";
$res = mysql_query($sql);

if ($res === FALSE) {
  die(mysql_error());
}

return mysql_query($sql);

Ответы [ 3 ]

1 голос
/ 29 марта 2011

Вы проверили точное сообщение об ошибке? функции MySQL возвращают «FALSE», если запрос не выполняется:

$sql = "INSERT ...";
$res = mysql_query($sql);
if ($res === FALSE) {
    die(mysql_error());
}

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

Скорее всего, ошибка связана с тем, что в поле значений есть лишняя запятая:

$sql = "INSERT INTO photos (`userID` ,title, brief, )".
                                                  ^---here

, что вызывает синтаксическую ошибку.

0 голосов
/ 30 мая 2011

Вы не можете вставить значение для внешнего ключа, как и все остальные.Взять пример из моего кода:

  mysql_query("INSERT INTO 'bikemodel' VALUES('1', 'Cougar 125', '2009', 'Scooter CVT 1sp 150cc', 'Scooter', 'Road Bike', '150', foreign key=1)");
0 голосов
/ 29 марта 2011

Два простых совета по отладке:

<1> Проверьте реальный код SQL, который вы отправляете на сервер. Добавьте эту строку в ваш код PHP:

echo htmlspecialchars($sql);

... найдите запрос в браузере и вставьте его в свой клиент MySQL (HeidiSQL, PHPMyAdmin или любой другой). Обратите особое внимание на возможные сообщения об ошибках.

<2> Проверить условия ошибок во всех функциях:

$con = mysql_connect(...);
if( !$con ){
   die( htmlspecialchars(mysql_error());
}
...
$res = mysql_query(...);
if( !$res ){
   die( htmlspecialchars(mysql_error());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...