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 类型等 的相关文章

  • 如何在 Zend Framework 3 中注册自定义表单视图助手

    我正在将继承的 Zend Framework 2 应用程序迁移到 Zend Framework 3 并且在注册自定义表单视图助手时遇到了一些困难 这些助手在应用程序使用版本 2 时起作用 主要用于添加标签属性以实现可访问性 例如 这是一个自
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中
  • 按文件名对 $_FILES 进行排序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 他俩 如您所知 在新的 HTML5 中 您可以非常轻松地上传多个文件 但我这里的问题是如何按列 名称 对 FILES 数组进行排序 这是
  • 您的要求无法解析为 laravel 的一组可安装软件包

    我使用 5 7v Laravel 和 7 2 1v PHP 和 Composer 最新版本 但是当我想创建新项目时出现这些错误 Your requirements could not be resolved to an installabl
  • CakePHP 视图包括其他视图

    我有一个 CakePHP 应用程序 在某些时候会显示带有产品媒体 图片或视频 的视图 我想知道是否有某种方式可以包含另一个威胁视频或威胁图片的视图 具体取决于标志 我想将这些 小视图 用于其他几个目的 所以它应该 像 蛋糕组件一样 以便重用
  • Xdebug V3 不会停止 VSCode 中的断点

    我正在尝试使用 VSCode 在 XAMPP 上进行调试 但没有成功 我知道有很多关于这个的问题 我已经尽了一切努力 但仍然行不通 我的 xdebug 扩展确实有一件奇怪的事情 我目前使用 PHP v7 4 12 和 Xdebug 版本 3
  • 分页显示所有其他页面上第 1 页的相同帖子

    我最近在创建即将发生的事件列表时得到了很多帮助 请参阅此处显示即将举行的活动 包括今天的活动 https stackoverflow com questions 17343615 showing upcoming events includ
  • 如何将表中不存在但原始SQL中存在的实体字段设置为别名?

    假设我们有一个这样的查询 SELECT CUSTOM EXPRESSION as virtualfield FROM users 用户的实体本身具有 虚拟字段 但映射注释没有 因为表没有该字段 假设它作为原始 SQL 执行 我们如何使用上面
  • 使用 XPATH(和 PHP)从样式属性中选择背景 url

    我只想从此背景图像样式属性中选择 url 这可以通过 XPATH 实现吗 a href http www test com style background image none test a 我有类似的东西 url xpath gt qu
  • Facebook PHP-SDK 页面刷新后似乎丢失了 userID

    我似乎登录工作正常 我可以登录 接受应用程序 第一次 然后显示用户信息 例如姓名 图片 等 然而 当我刷新页面时 userid 又回到 0 我必须再次登录 我不确定问题是什么 我必须在每次页面加载时重新启动它还是什么 我不知道 我会发布一些
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 如何在 Windows 上安装 Zend 框架

    安装 Zend Framework 就是这么简单 是的 对 好吧 我正在写一本初学者的书 有一件不太详细的事情是最重要的部分 安装该死的东西 浏览了几个小时的快速入门指南后 它只说 下载 Zend 添加包含目录 bla bla 然后就完成了
  • Nginx 502 网关错误。通过增加buffer来解决。为什么?

    我正在设置 LEMP 堆栈来运行 Drupal 我安装了 Nginx 和 PHP FastCGI Nginx 工作正常 但任何运行 PHP 的尝试都会出现错误 502 Bad Gateway 谷歌很快发现 nginx 502 错误网关 ht
  • 如何在codeigniter中将上传图片比例限制为16:9?

    这是我用来上传图像的代码 this gt load gt library upload ext pathinfo file name PATHINFO EXTENSION img name now ext imgConfig upload
  • CodeIgniter:My_Lang 中的 get_instance

    我发现这个有用的国际化代码 http pastebin com SyKmPYTX http pastebin com SyKmPYTX 一切正常 除了我无法在此类中使用 CI 函数 我想从 DB 设置 languages 和 special
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • 雄辩的第一个 where 子句

    我想知道 Laravel 如何实现雄辩的语法 以便可以静态调用第一个 where 子句User where User where id 23 gt where email email gt first 他们有吗public static f
  • Jquery一键提交多个同名表单

    我有动态创建的循环表单 我需要一键提交所有表单 我正在遵循下面的代码 你能建议我怎么做吗 谢谢
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows

随机推荐