返回

MySQLi 错误:mysqli_fetch_array():如何解决参数#1必须是mysqli_result类型?

php

修复MySQLi错误:mysqli_fetch_array():参数#1必须是mysqli_result类型

引言

当你将本地/开发环境中的MySQLi查询上传到网络主机环境时,你可能会遇到这个错误:mysqli_fetch_array():参数#1必须是mysqli_result类型。本文将深入探讨导致此错误的原因,并提供一步一步的解决方案。

错误原因

此错误通常表明$mysqli不是有效的MySQLi对象。以下是一些可能的原因:

  • $mysqli未正确初始化。
  • 在调用$mysqli->prepare()之前忘记了建立连接。
  • 在调用$stmt->bind_param()$stmt->execute()之前忘记了准备语句。
  • 在调用$stmt->bind_result()之前忘记了执行语句。

解决步骤

  1. 确保$mysqli已正确连接到数据库。

    • 使用mysqli_connect()函数建立连接,并检查连接是否成功。
  2. 确保在调用$mysqli->prepare()之前已准备语句。

    • 使用mysqli_prepare()函数准备语句,并检查准备是否成功。
  3. 确保在调用$stmt->bind_param()$stmt->execute()之前已执行语句。

    • 使用mysqli_stmt_execute()函数执行语句,并检查执行是否成功。
  4. 确保在调用$stmt->bind_result()之前已执行语句。

    • 使用mysqli_stmt_bind_result()函数绑定结果,并检查绑定是否成功。

其他解决步骤

  • 重新启动Web服务器。
  • 清除浏览器缓存。
  • 检查你的代码是否有语法错误。
  • 如果你在使用WordPress,请确保你的WordPress安装是最新的。
  • 如果你使用的是第三方插件或主题,请尝试禁用它们,看看是否解决了问题。

示例代码

以下是一个经过检查的示例代码:

<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
$cur_id = 123;
$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);
while ($stmt->fetch()) {
    echo "ID: $uid, Description: $desc\n";
}
$stmt->close();
$mysqli->close();
?>

结论

通过遵循这些步骤,你应该能够解决MySQLi错误:mysqli_fetch_array():参数#1必须是mysqli_result类型。如果你仍然遇到问题,请尝试在评论区寻求帮助。

常见问题解答

  1. 为什么我会在本地/开发环境中遇到这个错误?

    • 在本地/开发环境中,你可以使用非持久连接,这意味着在每个请求中都会重新建立连接。然而,在网络主机环境中,你通常使用持久连接,这意味着连接会在一段时间内保持打开状态。
  2. 如何检查$mysqli是否是有效的MySQLi对象?

    • 使用is_object($mysqli)函数检查$mysqli是否是对象。
  3. 如何重新启动Web服务器?

    • 这取决于你的Web服务器。对于Apache,使用apachectl restart命令。对于Nginx,使用nginx -s reload命令。
  4. 如何清除浏览器缓存?

    • 使用键盘快捷键,例如Ctrl+Shift+Delete(Windows)或Command+Shift+Delete(Mac)。
  5. 我应该如何报告错误?

    • 使用mysqli_error($mysqli)函数报告错误。这将返回一个包含错误的字符串。