无法插入外键值

时间:2011-03-29 15:04:35

标签: php mysql foreign-keys

我制作了两个表来存储用户信息,以及他们上传的照片信息。 一切顺利,除非我尝试将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被替换为存在于用户表(userID)中的静态数字(如'2'),它仍然无法插入。

我提出了添加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 个答案:

答案 0 :(得分:1)

您是否检查了确切的错误消息?如果查询失败,MySQL函数将返回'FALSE':

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

这将输出查询失败的确切原因。在你这样做之前,我们最多可以猜测问题是什么。

错误很可能是由于您的值字段中有额外的逗号:

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

导致语法错误。

答案 1 :(得分:0)

两个简单的调试技巧:

&LT 1为卤素;检查要发送到服务器的真实SQL代码。将此行添加到PHP代码中:

echo htmlspecialchars($sql);

...在浏览器中找到查询并将其粘贴到MySQL客户端(HeidiSQL,PHPMyAdmin或其他)中。请密切注意可能的错误消息。

&LT 2 - ;检查所有功能中的错误条件:

$con = mysql_connect(...);
if( !$con ){
   die( htmlspecialchars(mysql_error());
}
...
$res = mysql_query(...);
if( !$res ){
   die( htmlspecialchars(mysql_error());
}

答案 2 :(得分:0)

您不能像所有其他人一样插入外键的值。 以我的代码为例:

  mysql_query("INSERT INTO 'bikemodel' VALUES('1', 'Cougar 125', '2009', 'Scooter CVT 1sp 150cc', 'Scooter', 'Road Bike', '150', foreign key=1)");