PHP中有一个SQL语句,如下所示:
$sql = "SELECT t_da_edu_questions.ID, t_da_edu_questions.question_part1, t_da_edu_questions.question_part2, t_da_edu_questions.question_part3, t_da_edu_questions.answer, t_da_edu_questions.option2, t_da_edu_questions.option3, t_da_edu_questions.option4, t_da_edu_questions.option5, t_da_edu_questions.Supplerende, t_da_edu_questions.pic_id, t_da_edu_questions.Category_ID, t_da_edu_questions.approved, t_da_edu_questions.NeedAdmin
FROM t_da_edu_questions
WHERE (((t_da_edu_questions.Category_ID=?)) AND ((t_da_edu_questions.approved)=1) AND ((t_da_edu_questions.NeedAdmin)=0) AND
((t_da_edu_questions.ID) Not In (SELECT t_da_edu_UserAnswers.ID_qst FROM t_da_edu_UserAnswers WHERE ((t_da_edu_UserAnswers.ID_team = ?) AND T_da_edu_UserAnswers.AnsOrBack = 1 ))))
ORDER BY RAND()
LIMIT 1";
$stmt = mysqli_stmt_init($conn);
mysqli_stmt_prepare($stmt, $sql);
mysqli_stmt_bind_param($stmt, "ii", $cat, $TeamID); //(Line 36 in error)
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);我知道错误:
致命错误:未定义错误: mysqli_stmt对象未在C:\xampp\htdocs\app\content\db.php:36堆栈跟踪中完全初始化:#0 C:\xampp\htdocs\app\content\db.php(36):mysqli_stmt_bind_param( object (mysqli_stmt),'ii','6',304) #1
如果删除"Not In“中的子查询,它就能正常工作。我还没有找到类似的问题。
因此,基本上,我如何正确地添加准备好的语句来进行子查询?
发布于 2021-06-08 22:38:55
与往常一样,您忘记启用mysqli错误报告。打开它,您将看到来自MySQL的错误。要启用它,只需在建立连接之前添加该行即可。
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);在启用错误报告之前,我们无法真正判断真正的错误是什么。然而,我可以解释这个神秘的错误意味着什么。
当您用mysqli_stmt实例化mysqli_stmt_init()对象时,它只是一个普通的PHP对象,没有任何链接到它的准备语句。您必须调用mysqli_stmt_prepare()来准备MySQL服务器上的语句。当您的SQL出现问题时,准备将失败,mysqli_stmt对象将保持未初始化状态。你不能用这样的东西做任何事。
https://stackoverflow.com/questions/67894882
复制相似问题