我遇到了數據庫設計的一個主要缺陷。下面是我的四個表:如何在提交詳細信息後檢索ID
會話表:
SessionId SessionName
3 EROEW
問題表:
QuestionId(PK) QuestionNo QuestionContent SessionId (FK)
11 1 Question1 3
12 2 Question2 3
13 3 Question3 3
Image_Question:
ImageQuestionId (PK) ImageId (FK) SessionId (Fk) QuestionNo (FK)
1 1 3 1
2 2 3 2
圖片:
ImageId (PK) SessionId (Fk) QuestionNo (FK)
1 3 1
2 3 2
現在,作爲可以在Image_Question
表看到,QuestionNo
指QuestionNo
其是非唯一的或換句話說非唯一的字段。現在我認爲這是不好的做法。
現在我知道你打算說爲什麼不使用QuestionId
。那麼問題在於我不能使用QuestionId
,因爲在提交問題之前圖像會上傳到每個問題,並且我們可以提出問題的唯一方法就是在用戶提交問題之後提供問題QuestionId
。
所以我試圖做的是通過從頁面獲取QuestionNo
以及SessionId
來確定上傳圖像屬於哪個問題。
現在,我聽說這是一種不好的方式,我想將QuestionNo (FK)
的Image_Question
更改爲QuestionId (FK)
。但是我不能在提交問題後獲得QuestionId
上傳文件並插入上傳文件的細節,對我來說這是無法完成的。
所以我的問題是,有沒有辦法我們可以如何將每個上傳的圖像存儲到臨時表中,獲取每個圖像所屬的問題編號和sessionid,然後從那裏能夠找到QuestionId
並存儲QuestionId
值在Image_Question
表中?
下面是我當前的PHP代碼它插入值的圖像上傳後:
要非常感激,如果有人可以在下面更新代碼,但任何答案將是有益的:
move_uploaded_file($_FILES["fileImage"]["tmp_name"],
"ImageFiles/" . $_FILES["fileImage"]["name"]);
$result = 1;
$imagesql = "INSERT INTO Image (ImageFile)
VALUES (?)";
//Dont pass data directly to bind_param store it in a variable
$insert->bind_param("s",$img);
//Assign the variable
$img = 'ImageFiles/'.$_FILES['fileImage']['name']; //GET THE IMAGE UPLOADED
$insert->execute();
$insert->close();
$lastImageID = $mysqli->insert_id;
$_SESSION['lastImageID'] = $lastImageID;
$_SESSION['ImageFile'] = $_FILES["fileImage"]["name"];
$sessid = $_SESSION['id'] . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : ''); GET THE NAME OF THE SESSION
$sessionquery = "SELECT SessionId FROM Session WHERE (SessionName = ?)"; //FIND SESSIONID by finding it's SESSIONNAME
// Bind parameter for statement
$sessionstmt->bind_param("s", $sessid);
// Execute the statement
$sessionstmt->execute();
// This is what matters. With MySQLi you have to bind result fields to
// variables before calling fetch()
$sessionstmt->bind_result($sessionid);
// This populates $sessionid
$sessionstmt->fetch();
$sessionstmt->close();
$imagequestionsql = "INSERT INTO Image_Question (ImageId, SessionId, QuestionNo) //INSERT DETAILS INTO CURRENT IMAGE_QUESTION TABLE
VALUES (?, ?, ?)";
if (!$insertimagequestion = $mysqli->prepare($imagequestionsql)) {
// Handle errors with prepare operation here
echo "Prepare statement err imagequestion";
}
$qnum = (int)$_POST['numimage']; //QUESTION NUMBER IMAGE IS UPLOADED IN
$insertimagequestion->bind_param("iii",$lastImageID, $sessionid, $qnum);
$insertimagequestion->execute();
if ($insertimagequestion->errno) {
// Handle query error here
}
$insertimagequestion->close();