2011-03-29 99 views
0

我制作了两张表来存储用户信息以及他们上传的照片信息。 一切顺利,除了当我尝试插入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 = "INSERT INTO photos (userID ,title, brief)". 
     "VALUES ('$uid', '$title','$bodytext')"; 

即使$uid由静态编号,如“2”,它存在于用户表(用户ID)代替SQL命令,它仍然无法插入。

我花了一些建议添加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); 
+1

对于启动'('userID',标题,简要,)'删除最后一个逗号 – 2011-03-29 15:06:50

+1

PHP = SQL! MySQL服务器永远不会看到你的PHP代码或变量。当您在您最喜爱的MySQL客户端中运行查询时,会得到什么错误消息? – 2011-03-29 15:24:51

+0

当我在phpMyAdmin中运行它时,信息被插入。不知道为什么它不能在php代码中工作... – Pei 2011-03-29 15:43:34

回答

1

你检查过确切的错误信息?如果查询失败,MySQL函数返回'FALSE':

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

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

最有可能的错误是由于你在你的价值观领域有额外的逗号:

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

导致语法错误。

+0

对不起。清理此处发布的代码时,我犯了这个错误。它并不真的导致问题。 我尝试了下面的mysql_error函数。但是,它没有显示任何消息。我错过了什么? $ sql =“INSERT INTO photos('userID',title,brief)”。 “VALUES( '1','$ title','$ bodytext')”; return mysql_query($ sql); $ res = mysql_query($ sql); if($ res === FALSE){ die(mysql_error()); } – Pei 2011-03-29 15:15:42

+0

@Pei:你可能知道,在return函数后,函数内部没有任何东西被执行。你应该编辑你的问题并在那里粘贴其他信息。代码在评论中无法读取。 – 2011-03-29 15:21:19

+0

是的,我编辑了这个问题。 – Pei 2011-03-29 15:29:06

0

两个简单的调试技巧:

< 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()); 
} 
0

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

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