大家好日子!
目前,我正在尝试为我的问题找到解决方法。就我而言,MySqli并不支持嵌套的fetch,因此我的功能并不是很有用。我试图找到一个修复,但没有运气。我目前的代码:
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",我需要抓住"额外的"来自另一个表的值。我该怎么做?
维拉德
答案 0 :(得分:0)
两周前我或多或少地遇到了这个问题,并找到了两个有效的解决方案:
1。)嵌套查询,但为它们使用/初始化两个不同的连接(即使它是在同一个数据库中)
2。)首先执行一个查询,将结果保存在数组中,然后在另一个查询中使用该数组。
答案 1 :(得分:0)
如果缓冲结果,则可以运行第二个查询,而不会丢失第一个查询的结果。
在Mysqli中,您通过mysqli_stmt::store_result
method缓冲已执行的预准备语句的结果(默认情况下是未缓冲的)。
...
$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();
...