Php 嵌套while的解决方法->;取来

Php 嵌套while的解决方法->;取来,php,mysqli,Php,Mysqli,大家好 目前,我正试图为我的问题找到解决办法。公平地说,MySqli不支持嵌套的fetch'es,因此我的函数不能正常工作。我试图找到解决办法,但运气不好。我当前的代码: function viewQuestionnaire($id){ $questionStmt = $this->connection->prepare("SELECT id, type, name FROM TAP_questions WHERE questionnaire_id=?;"); $q

大家好

目前,我正试图为我的问题找到解决办法。公平地说,MySqli不支持嵌套的fetch'es,因此我的函数不能正常工作。我试图找到解决办法,但运气不好。我当前的代码:

function viewQuestionnaire($id){

    $questionStmt = $this->connection->prepare("SELECT id, type, name FROM TAP_questions WHERE questionnaire_id=?;");
    $questionStmt->bind_param("i", $id);
    $questionStmt->bind_result($id, $type, $name);
    $questionStmt->execute();
    $result = array();

    while ($questionStmt->fetch()) {
        $questions = new StdClass();
        $questions->question_id = $id;
        $questions->question_type = $type;
        $questions->question_options = array();
        $questions->question_name = $name;
        if($questions->question_type=="2"){
            $stmtOptions= $this->connection->prepare("SELECT id, options FROM TAP_options WHERE question_id=?;");
            $stmtOptions->bind_param("i", $id);
            $stmtOptions->bind_result($qu_id, $qu_opt);
            $stmtOptions->execute();
            while ($stmtOptions->fetch()) {
                $options = new StdClass();
                $options->option_id = $qu_id;
                $options->option_name = $qu_opt;
                array_push($questions->question_options, $options);
            }

            $stmtOptions->close();
        }

        array_push($result, $questions);
    }

    $questionStmt->close();


    return $result;
}
如您所见,我试图从数据库中获取值,具体取决于问题类型。如果问题类型为“2”,我需要从另一个表中获取“附加”值。我该怎么做


Vlad

两周前,我或多或少地遇到了这个问题,并找到了两个可行的解决方案:

1.)嵌套查询,但使用/初始化查询的两个不同连接(即使是到同一数据库)


2.)首先执行一个查询,将结果保存在数组中,然后在另一个查询中使用该数组。

如果缓冲结果,则可以运行第二个查询,而不必丢失第一个查询的结果

在Mysqli中,您可以通过缓冲区缓冲已执行的prepared语句的结果(默认情况下是无缓冲的)


对进行(嵌套)获取没有限制。您不能同时进行两次查询,因为mysqli默认使用无缓冲查询(对于准备好的语句;对于普通的mysql_查询则相反)。但是您可以告诉我们使用缓冲查询,这应该是可以控制的。我已经用我的原始代码更新了我的初始帖子,你能帮助我或给我一个提示如何解决这个问题吗?很抱歉,不清楚,你可以存储结果来缓冲它,这是对外部结果要做的另一个方法调用:你不需要自己创建数组,你可以告诉驱动程序缓冲结果:是的,这基本上就是我的意思(我不是这个意思)“创建一个数组来保存数据”但是“使用php函数将结果保存在一个数组中”…)
...

$questionStmt = $connection->prepare(
    "SELECT id, type, name FROM TAP_questions WHERE questionnaire_id=?;"
);
$questionStmt->bind_param("i", $id);
$questionStmt->bind_result($id, $type, $name);
$questionStmt->execute();

/* store result */
$questionStmt->store_result();

...

/* free result */
$questionStmt->free_result();

$questionStmt->close();

...