Mysql 如何使用SELECT查找能够检索其id的值?
我无法将Mysql 如何使用SELECT查找能够检索其id的值?,mysql,sql,mysqli,Mysql,Sql,Mysqli,我无法将问题ID插入答案表 Question插入时没有问题,但我正在尝试从Question表中检索QuestionId,该表通过查找特定QuestionId所属的SessionId和QuestionNo自动递增到Answer表中。相反,当插入到答案表中时,它会为问题ID持续显示0 现在我知道从Question表中为每个QuestionId执行选择的查询是正确的,因为这已经过测试。我想问题是我把代码放在哪里了,但我不确定 我想用SELECT方法来查找问题编号,我不想使用mysqli->insert
问题ID
插入答案
表
Question
插入时没有问题,但我正在尝试从Question
表中检索QuestionId
,该表通过查找特定QuestionId
所属的SessionId
和QuestionNo
自动递增到Answer
表中。相反,当插入到答案
表中时,它会为问题ID
持续显示0
现在我知道从Question
表中为每个QuestionId
执行选择的查询是正确的,因为这已经过测试。我想问题是我把代码放在哪里了,但我不确定
我想用SELECT方法来查找问题编号,我不想使用mysqli->insert\u id
以下是数据库表:
问题表
QuestionId (auto) SessionId QuestionNo
4 2 1
5 2 2
6 2 3
目前答题表:
AnswerId (auto) QuestionId Answer
7 0 A
8 0 C
9 0 A
10 0 B
11 0 True
答案表应该是什么样子的:
AnswerId (auto) QuestionId Answer
7 4 A
8 4 C
9 5 A
10 5 B
11 6 True
代码如下:
$questionsql = "INSERT INTO Question (SessionId, QuestionNo)
VALUES (?, ?)";
if (!$insert = $mysqli->prepare($questionsql)) {
// Handle errors with prepare operation here
echo __LINE__.': '.$mysqli->error;
}
$answersql = "INSERT INTO Answer (QuestionId, Answer)
VALUES (?, ?)";
if (!$insertanswer = $mysqli->prepare($answersql)) {
// Handle errors with prepare operation here
echo __LINE__.': '.$mysqli->error;
}
//make sure both prepared statements succeeded before proceeding
if( $insert && $insertanswer)
{
$sessid = $_SESSION['id'] . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '');
$c = count($_POST['numQuestion']);
for($i = 0; $i < $c; $i++ )
{
$insert->bind_param("ii", $sessionid, $_POST['numQuestion'][$i]);
$insert->execute();
if ($insert->errno)
{
// Handle query error here
echo __LINE__.': '.$insert->error;
break 1;
}
}
$results = $_POST['value'];
foreach($results as $id => $value)
{
$answer = $value;
$lastID = $id;
$questionidquery = "SELECT QuestionId FROM Question WHERE (QuestionNo = ? AND SessionId = ?)";
if (!$questionidstmt = $mysqli->prepare($questionidquery)) {
// Handle errors with prepare operation here
echo __LINE__.': '.$mysqli->error;
}
// Bind parameter for statement
$questionidstmt->bind_param("ii", $lastID, $sessionId);
// Execute the statement
$questionidstmt->execute();
if ($questionidstmt->errno)
{
// Handle query error here
echo __LINE__.': '.$questionidstmt->error;
break 2;
}
// This is what matters. With MySQLi you have to bind result fields to
// variables before calling fetch()
$questionidstmt->bind_result($quesid);
// This populates $optionid
$questionidstmt->fetch();
$questionidstmt->close();
foreach($value as $answer)
{
$insertanswer->bind_param("is", $quesid, $answer);
$insertanswer->execute();
if ($insertanswer->errno) {
// Handle query error here
echo __LINE__.': '.$insertanswer->error;
break 3;
}
}
}
//close your statements at the end
$insertanswer->close();
$insert->close();
}
?>
您可以通过以下方式查找最后插入的id:
SELECT LAST_INSERT_ID();
请注意,该值将仅返回最后一次插入,因此如果要执行更多插入,则必须将其保存以供重用:
伪代码:
- 插入问题
- 运行query
并将应用层中的值保存到variable选择LAST\u INSERT\u ID()
qid
- 插入答案,对答案行的问题id使用
qid
“从问题WHERE(QuestionNo=?和SessionId=?)中选择QuestionId”代码>至“从问题中选择问题ID
?我可以问一下如何通过在考试(SessionId)中查找问题编号(问题编号)来查找问题ID吗因为我有一个页面,可以在其中插入数据,但不需要最后一个id。你想要什么真的不清楚。主要是因为你的问题上有太多的代码,几乎所有的代码都是无关的。让你的问题尽可能简短,但仍然清晰。人们不会费力地通过代码试图找出你的答案意图。除非出于澄清的需要,否则避免发布代码。我已缩短了代码,并将var转储帖子。我要做的是将问题ID插入答题表。每个答案都属于一个问题。因此,为了能够知道答案属于哪个问题,我需要将问题ID
显示在答题表中。为了能够重试如果有一个问题Id
,我想为每个答案执行一个选择,它将找到问题编号(问题编号)和会话Id
(考试Id)为了能够从Question
表中检索正确的QuestionId
,并将其插入Answer
表中,我想问题是我可能会在哪里显示SELECT语句,因为我看不出SELECT语句有什么问题,但我没有sure@Bohemian你看到我在你回答下面的评论了吗?
SELECT LAST_INSERT_ID();