2011-03-29 127 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)");