php - mysqli_stmt 对象未完全初始化
问题描述
我在 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(对象(mysqli_stmt), 'ii', '6', 304) #1
如果我删除“不在”中的子查询,它工作正常。我一直无法找到类似的问题。
那么,基本上,我如何正确地将准备好的语句添加到带有子查询的查询中?
解决方案
像往常一样,您忘记启用 mysqli 错误报告。打开它,您将看到来自 MySQL 的错误。要启用它,只需在建立连接之前添加此行。
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
在您启用错误报告之前,我们无法真正分辨出真正的错误是什么。但是,我可以解释这个神秘错误的含义。
当你用 实例化mysqli_stmt
对象时mysqli_stmt_init()
,它只是一个普通的 PHP 对象,没有任何与之链接的准备好的语句。您必须调用mysqli_stmt_prepare()
以准备 MySQL 服务器上的语句。当您的 SQL 出现问题时,准备将失败并且mysqli_stmt
对象将保持未初始化状态。您不能将这样的对象用于任何事情。
推荐阅读
- dynamics-crm - OneLogin + Dynamics 365 通过代码进行身份验证
- lua - Roblox Studio - GUI 的按键切换
- angular - 如何将上下文传递给 Angular 4 中 *ngIf 的 else 分支?
- python - scikit-learn 和 scipy 库之间的确定系数不同。为什么?
- java - 如何在另一个方法之后调用方法?
- angularjs - 导入模块时如何让angularjs组件呈现相关模板
- apache-spark - pyspark 在 udf 中使用数据框
- javascript - 如何根据动态对象的值对数组进行排序
- excel - Excel Sumifs 数组在 1 个单元格内具有多个条件
- r - 使用正则表达式识别字符