8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

Igor Kupczyński 1月前

58 0

在我的本地/开发环境中,MySQLi 查询执行正常。但是,当我将其上传到我的网络主机环境时,我收到此错误:致命错误:调用成员函数 bind_param()...

在我的本地/开发环境中,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 ,结果正常。

帖子版权声明 1、本帖标题:mysqli 问题该怎么办?mysqli_fetch_array() 等错误:参数 #1 必须是 mysqli_result 类型等
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Igor Kupczyński在本站《ajax》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 从 PHP 8.1.0 开始,默认设置为 MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT。以前是 MYSQLI_REPORT_OFF。php.net/manual/en/mysqli-driver.report-mode.php

  • @ToolmakerSteve 你肯定是指错误处理程序,而不是 try catch

  • \'未捕获的异常反过来会导致 PHP 致命错误\' 在生产服务器上导致致命错误是个好主意吗(对于 mysql 错误)? 有没有几种情况下,错误表明您的脚本应该处理问题,并继续执行;例如,通知用户您现在无法向他们提供该信息,同时提醒操作员进行调查? 编辑 我明白了,在需要的地方您尝试..捕获 mysql 错误(您已将其转换为 php 错误)。

  • @Barkermn01 这是您的一个合理担忧,但您得出的结论是错误的。当然,您的应用程序应该产生一个有效的结果(如果出现“Mysql 已消失”错误,则应该是一个通用的 500 错误页面)。但您必须明白,这种有效的结果不是您的数据库代码的关注点。您的数据库相关代码应该与数据库一起工作。而显示错误页面应该是不同代码的关注点。请参见此处:phpdelusions.net/articles/error_reporting

  • 在很大程度上,我同意,但是我不同意“你的常识”,“不只是编写代码来规避错误”你认为 try...catch 做什么,它规避错误以防止代码库以不受控制的方式退出,有些错误你无法在代码中修复,例如 DB 服务器已经消失,你只需要管理错误并规避错误以产生有效的结果。

  • Nit 1月前 0 只看Ta
    引用 7

    长话短说

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

    解释

    有时您的 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 connect 之前始终有此行:

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    

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

    如何从 PHP 获取错误信息

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

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

    如何处理收到的错误消息

    首先,您必须找到问题查询。错误消息包含 发生错误的确切位置的 行号 堆栈跟踪 来找到问题查询。

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

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

    如果您不明白错误消息,请尝试谷歌搜索。浏览搜索结果时,请坚持寻找 解释 错误的答案,而不是直接给出解决方案。解决方案可能不适用于您的特定情况,但解释将帮助您了解问题并让您能够自行解决问题。

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

    基本调试

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

    1. 执行过程中出现错误。上面已经解释过了。
    2. 由于程序逻辑不正确,SQL 根本无法运行。添加临时调试输出以确保代码到达查询执行的位置。
    3. SQL 已成功执行,但结果显示在 错误的数据库 。请仔细检查
    4. 输入的数据与数据库不匹配。以下是一些 检查方法
返回
作者最近主题: