mysqli出现问题怎么办?诸如 mysqli_fetch_array() 之类的错误:参数 #1 的类型必须是 mysqli_result

问题描述 投票:0回答:1

在我的本地/开发环境中,MySQLi 查询执行正常。但是,当我将其上传到我的网络主机环境时,我收到此错误:

致命错误:在...中的非对象上调用成员函数bind_param()

这是代码:

global $mysqli; $stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?"); $stmt->bind_param('i', $cur_id); $stmt->execute(); $stmt->bind_result($uid, $desc);
为了检查我的查询,我尝试通过控制面板

phpMyAdmin执行查询,结果没问题。

php mysqli error-reporting
1个回答
189
投票
TL;博士

    始终在 mysqli 连接代码中包含
  1. mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
     
    并始终检查 PHP 错误
  2. 始终将 SQL 查询中的每个 PHP 变量替换为问号,并使用
  3. 准备好的语句执行查询。它将有助于避免各种语法错误。
说明

有时您的 mysqli 代码会产生类似

mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given...

Call to a member function bind_param()...
 或类似错误。或者即使没有任何错误,但查询仍然无法正常工作。这意味着您的查询无法执行。

每次查询失败时,MySQL 都会有

解释原因的错误消息。在旧的 PHP 版本中,此类错误不会转移到 PHP,您得到的只是上面提到的一条神秘的错误消息。因此,配置 PHP 和 mysqli 向您报告 MySQL 错误非常重要。一旦收到错误消息,您就能够修复错误。

如何获取mysqli中的错误信息

首先,在

all 您的环境中连接 mysqli 之前始终要有此行:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
之后,所有MySQL错误都会转为PHP异常。未捕获的异常又会导致 PHP 致命错误。因此,如果出现 MySQL 错误,您将收到传统的 PHP 错误。这将立即让您意识到错误原因。堆栈跟踪将引导您找到发生错误的确切位置。

如何从 PHP 获取错误消息

在开发服务器上,确保屏幕上显示错误,而在实时服务器上,请检查错误日志。有关详细信息,请参阅我关于

PHP 错误报告 的文章。

请注意,如果是 AJAX 调用,请在开发服务器上打开 DevTools (F12),然后打开“网络”选项卡。然后发起您想要看到的结果的请求,它将出现在“网络”选项卡中。单击它,然后单击“响应”选项卡。在那里您将看到确切的输出。在实时服务器上检查错误日志。

如何处理收到的错误消息

首先你必须找到问题查询。错误消息包含发生错误的确切位置的

文件名和行号。对于简单的代码来说就足够了,但如果您的代码使用函数或类,您可能需要按照堆栈跟踪来定位问题查询。

收到错误消息后,您必须阅读并理解它。如果不是居高临下的话,这听起来太明显了,但学习者经常忽略这样一个事实:错误消息不仅仅是警报信号,而且它实际上包含

问题的详细解释。您所需要做的就是阅读错误消息并解决问题。

    比如说,如果它说某个特定的表不存在,你必须检查拼写、拼写错误和字母大小写。此外,您还必须确保您的 PHP 脚本连接到正确的数据库
  • 或者,如果它说 SQL 语法有错误,那么你必须检查你的 SQL。问题点就在错误消息中引用的查询部分之前
  • 如果您不明白错误消息,请尝试谷歌搜索。在浏览结果时,请坚持使用“解释”错误的答案,而不是直白地给出解决方案。解决方案可能不适用于您的特定情况,但解释将帮助您理解问题并使您能够自己解决问题。

您还必须信任错误消息。如果它说标记的数量与绑定变量的数量不匹配,那么它就是这样。对于缺失的表或列也是如此。如果有选择,无论是你自己的错误还是错误消息是错误的,请始终坚持前者。这听起来又有点居高临下,但这个网站上的数百个问题证明这个建议非常有用。

基本调试 如果您的查询看似不起作用,可能是由以下四个原因引起的:

执行过程中出现错误。上面已经解释过了。

由于程序逻辑不正确,SQL根本没有运行。添加临时调试输出以确保代码到达查询执行的位置。

SQL 执行成功,但在
    错误的数据库
  1. 中查看结果。仔细检查一下
  2. 输入的数据与数据库不匹配。以下是一些关于
  3. 如何检查
  4. 的建议
© www.soinside.com 2019 - 2024. All rights reserved.