2012-09-30 54 views
0

我在下面有一些php代碼,它將數據添加到2個表中,一個稱爲「Image Table」,另一個稱爲「Image_Question」表。我遇到的問題是,當它插入到「圖像」表中時,它不會將任何數據插入到「Image_Question」表中。它不是將數據插入表中

現在我知道PHP代碼很好,因爲它曾經能夠將數據插入到兩個表中而沒有任何問題。

只有在向我的表中添加索引和外鍵之後,纔開始出現此問題。

下面是數據插入到兩個表PHP代碼:

move_uploaded_file($_FILES["fileImage"]["tmp_name"],"ImageFiles/" . $_FILES["fileImage"]["name"]); 

$imagesql = "INSERT INTO Image (ImageFile) VALUES (?)"; 

if (!$insert = $mysqli->prepare($imagesql)) { 
     // Handle errors with prepare operation here 
} 

//Don't pass data directly to bind_param store it in a variable 
$insert->bind_param("s",$img); 

//Assign the variable 
$img = 'ImageFiles/'.$_FILES['fileImage']['name']; 

$insert->execute(); 

if ($insert->errno) { 
    // Handle query error here 
} 

$insert->close(); 

$lastID = $mysqli->insert_id;   

$imagequestionsql = "INSERT INTO Image_Question (ImageId, SessionId, QuestionId) VALUES (?, ?, ?)"; 

if (!$insertimagequestion = $mysqli->prepare($imagequestionsql)) { 
    // Handle errors with prepare operation here 
    echo "Prepare statement err imagequestion"; 
} 

$qnum = (int)$_POST['numimage']; 

$insertimagequestion->bind_param("isi",$lastID, $sessid, $qnum); 

$sessid = $_SESSION['id'] . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : ''); 

    $insertimagequestion->execute(); 

       if ($insertimagequestion->errno) { 
      // Handle query error here 
     } 

     $insertimagequestion->close(); 

下面是SHOW CREATE TABLE的映象表的輸出,Image_Question表,也是問題表作爲Image_Question表涉及到該表:

圖片表:

CREATE TABLE `Image` (
`ImageId` int(10) NOT NULL AUTO_INCREMENT, 
`ImageFile` varchar(250) NOT NULL, 
PRIMARY KEY (`ImageId`) 
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 

Image_Question表:

CREATE TABLE `Image_Question` (
`ImageQuestionId` int(10) NOT NULL AUTO_INCREMENT, 
`ImageId` int(10) NOT NULL, 
`SessionId` varchar(10) NOT NULL, 
`QuestionId` int(5) NOT NULL, 
PRIMARY KEY (`ImageQuestionId`), 
KEY `FK_QuestionImage` (`ImageId`), 
KEY `questionId` (`QuestionId`), 
KEY `sessionId` (`SessionId`), 
CONSTRAINT `FK_Image_Question` FOREIGN KEY (`SessionId`) REFERENCES `Question` (`SessionId`) ON DELETE CASCADE, 
CONSTRAINT `FK_question` FOREIGN KEY (`QuestionId`) REFERENCES `Question` (`QuestionId`) ON DELETE CASCADE, 
CONSTRAINT `FK_QuestionImage` FOREIGN KEY (`ImageId`) REFERENCES `Image` (`ImageId`) ON DELETE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 

問表:

CREATE TABLE `Question` (
`SessionId` varchar(10) NOT NULL DEFAULT '', 
`QuestionId` int(5) NOT NULL, 
`QuestionContent` varchar(5000) NOT NULL, 
`NoofAnswers` int(2) NOT NULL, 
`AnswerId` int(10) NOT NULL AUTO_INCREMENT, 
`ReplyId` varchar(2) NOT NULL, 
`QuestionMarks` int(4) NOT NULL, 
`OptionId` varchar(3) NOT NULL, 
PRIMARY KEY (`SessionId`,`QuestionId`), 
KEY `FK_Option_Table` (`OptionId`), 
KEY `FK_IndividualQuestion` (`QuestionId`), 
KEY `FK_Reply` (`ReplyId`), 
KEY `FK_AnswerId` (`AnswerId`) 
) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=utf8 
+0

請儘量熟悉的編輯工具在本網站和正確縮進代碼爲別人需要閱讀它。我相信你的答案可以更容易回答。此外,它會很高興知道MySQL是否回饋任何錯誤消息。請記住,如果外鍵的約束不匹配,插入操作可能會被拒絕。 – hakre

+2

如果有索引和forign鍵,當你試圖插入表'Image_Question'時,你可以發佈你得到的錯誤嗎?這可能是因爲,當向「Image_Question」表中插入數據時,這些數據必須滿足這些表中的外鍵約束。檢查兩個字段'SessionId'和'QuestionId'的值。 –

回答

0
$img = 'ImageFiles/'.$_FILES['fileImage']['name']; 

$insert->bind_param("s",$img); 

使用此而不是

$insert->bind_param("s",$img); 

//Assign the variable 
$img = 'ImageFiles/'.$_FILES['fileImage']['name'];