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

2024-04-21

在我的本地/开发环境中,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);

为了检查我的查询,我尝试通过控制面板执行查询php我的管理员 https://en.wikipedia.org/wiki/PhpMyAdmin结果是好的。


Answer recommended by PHP /collectives/php Collective

TL;DR

  1. 一直有mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);在你的 mysqli 连接代码中并始终检查 PHP 错误.
  2. 始终用问号替换 SQL 查询中的每个 PHP 变量,并使用以下命令执行查询准备好的声明 https://phpdelusions.net/mysqli_examples/prepared_select。它将有助于避免各种语法错误。

解释

有时你的 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中的错误信息

首先,在 mysqli 连接之前始终有这一行all您的环境:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

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

如何从 PHP 获取错误消息

在开发服务器上,确保屏幕上显示错误,而在实时服务器上,请检查错误日志。请参阅我的文章PHP错误报告 https://phpdelusions.net/basic_principles_of_web_programming#error_reporting了解详情。

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

如何处理收到的错误消息

首先,您必须找到问题查询。错误信息包含文件名和行号发生错误的确切位置。对于简单的代码来说就足够了,但是如果您的代码使用函数或类,您可能需要遵循堆栈跟踪来定位问题查询。

收到错误消息后,您必须阅读并理解它。这听起来太明显了,如果不是居高临下的话,但学习者常常忽视这样一个事实:错误消息不仅仅是一个警报信号,它实际上包含了一个错误信息。问题的详细解释。您所需要做的就是阅读错误消息并解决问题。

  • 比如说,如果它说某个特定的表不存在,您必须检查拼写、拼写错误和字母大小写。此外,您还必须确保您的 PHP 脚本连接到正确的数据库
  • 或者,如果它说 SQL 语法有错误,那么你必须检查你的 SQL。而且问题点是对的before错误消息中引用的查询部分。

如果您不明白错误消息,请尝试用 google 搜索。浏览结果时,请坚持以下答案explain错误而不是直接给出解决方案。解决方案可能不适用于您的特定情况,但解释将帮助您理解问题并使您能够自己解决问题。

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

基本调试

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

  1. 执行过程中出现错误。上面已经解释过了。
  2. 由于程序逻辑不正确,SQL 根本没有运行。添加临时调试输出以确保代码到达查询执行的位置。
  3. SQL执行成功,但结果在错误的数据库 https://stackoverflow.com/a/60666640/285587。仔细检查一下
  4. 输入数据与数据库不匹配。这里有一些建议如何检查 https://stackoverflow.com/a/57986043/285587
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysqli出现问题怎么办?类似 mysqli_fetch_array() 的错误:参数 #1 必须是 mysqli_result 类型等 的相关文章

  • 向 tk103 GPS 跟踪器发送命令

    我正在使用 php 开发实时 GPS 跟踪器 Web 应用程序 跟踪器参考号是tk103 我可以从跟踪器接收信息并将其存储到数据库中 设备的 GPRS 模式已启用 我的问题是 如何使用 php ini 将命令从服务器发送到设备 提前致谢 这
  • 关闭旧的 php websocket

    我在用PHP Websockets https github com ghedipunk PHP Websockets创建一个简单的聊天服务器 当我第一次运行在我的服务器上创建 websocket 的 php 脚本时 一切正常 如果脚本由于
  • 如何测试“If-Modified-Since”HTTP 标头支持

    使用 PHP 如何准确测试远程网站supports If Modified Since HTTP 标头 据我所知 如果您获取的远程文件自标头请求中指定的日期以来已被修改 它应该返回 200 OK 状态 如果尚未修改 则应返回 304 Not
  • 在仅包含键的字符串的嵌套数组中查找值

    我有一个数组 其中包含一些设置 基本上如下所示 defaults array variable gt value thearray gt array foo gt bar myvar gt array morevars gt moreval
  • 在 php 中回显 JSON 数据

    我正在尝试回显一些 JSON 数据 问题是数据包含变量 但我的代码没有将变量放入字符串中 这是我的代码 status row Status priority row Priority echo status status priority
  • DOMDocument PHP 内存泄漏

    在 MAC 上的 MAMP 下运行 PHP 5 3 6 内存使用量每调用 x 次 3 到 8 次 就会增加 直到脚本因内存耗尽而终止 我该如何解决 libxml use internal errors true while true dom
  • 是否需要使用fetch_object或fetch_array?

    我最近发现我可以打印数据库中的结果而不使用mysqli fetch object功能 例如 假设我们有一个简单的 sql select 语句 可以使用如下所示的语句来执行 conn mysqli connect localhost root
  • 使用 PHP 将表单数据发送/发布到 URL [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个通过 POST 提交的表单 提交表单后我捕获变量 如何连接表单数据 然后将其 POST 到 url 然后重新定向到感谢页面 这不是确
  • Netbeans 8 和 xdebug 非常非常慢

    我读过有关此问题的其他帖子 但我无法在本地 Web 服务器 Windows 7 上的 apache 2 4 9 php 5 5 12 上使用 xdebug 2 2 5 和 netbeans 8 0 1 获得令人满意的性能 有些页面加载时间超
  • 使用 PHP 查询更改表,列名未显示在 phpMyAdmin 中

    这是我的第一篇文章 这里有一篇类似的文章 phpMyAdmin 不显示添加的列 代码日志 https stackoverflow com questions 12960302 phpmyadmin doesnt show added col
  • 如何使用 Angular4 进行 Codeigniter 视图?

    首先 我的 PHP Codeigniter 项目当前在服务器上运行 然后我在服务器上安装了最新的 Angular4 CLI Typescript 但我不知道如何与Codeigniter项目集成 如何像 AngularJS 一样在 Codei
  • 对自定义 symfony 约束进行单元测试

    这应该非常简单 但今天下午它让我发疯 对自定义 symfony 验证器进行单元测试的正确方法是什么 我能找到的所有文章都与我的做法完全相同 class Foo extends Constraint public string message
  • 将数组文字传递给 PostgreSQL 函数

    我有一个包含 select 语句的 Postgres 函数 我需要使用包含字符串值数组的传入变量添加条件 CREATE OR REPLACE FUNCTION get questions vcode text RETURN return v
  • printf() 字符串中的名称 PHP 说明符

    PHP 中有没有一种方法可以像 Python 一样命名我的说明符 我想要这个 PHP 版本 foo array name gt 24 printf name d foo 我在 google 或 php 手册中找不到任何相关内容 好问题 通过
  • 下拉 Ajax onchange SonataAdminBundle Symfony2 问题

    我正在尝试在 SonataAdminBundle 中实现 onchange 下拉菜单 我的实体就像 class BuilderHomePage var integer ORM Column name id type integer null
  • Javascript 闭包与 PHP 闭包,有什么区别?

    JS 中的闭包和 PHP 中的闭包有什么区别 它们的工作方式几乎相同吗 在 PHP 中编写闭包时有什么需要注意的注意事项吗 一个区别是两者如何处理存储执行匿名函数的上下文 JavaScript var a 1 var f function
  • Mailgun 内联图像,它是如何工作的?

    我正在使用 mailgun 并希望将图像添加到我的时事通讯中 现在我这样做了 mg gt sendMessage domain array from gt email protected cdn cgi l email protection
  • 将 __DIR__ 常量与字符串连接作为数组值,该数组值是 PHP 中的类成员

    谁能告诉我为什么这不起作用 这只是我在其他地方尝试做的事情的一个粗略的例子 stuff array key gt DIR value 但是 这会产生错误 PHP Parse error syntax error unexpected exp
  • PHP:检查任何基于拉丁语的语言中的字母字符?

    使用 PHP 我想检查一个字符串仅包含字母字符 我不想允许任何数字或特殊字符 例如 ctype alpha 对于这个目的来说似乎很棒 问题是我想允许重音字母 例如法语等 例如 我想允许 L rien 我知道ctype alpha 可以与se
  • PHP 中可以动态添加数据成员吗?

    我想知道是否可以在 PHP 运行时添加新的类数据成员 Yes prop newname obj gt prop 42 会做同样的事情 obj gt newname 42 如果 obj 尚不存在 则任一者都会将 newname 添加为属性

随机推荐