Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用SELECT查找能够检索其id的值?_Mysql_Sql_Mysqli - Fatal编程技术网

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
    选择LAST\u INSERT\u ID()
    并将应用层中的值保存到variable
    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();