怎么处理mysqli的问题?例如出现mysqli_fetch_array():参数#1必须是mysqli_result类型的错误。
P粉426906369
P粉426906369 2023-07-24 16:47:03
0
1
485
<p>在我的本地/开发环境中,MySQLi查询运行正常。然而,当我将其上传到我的Web主机环境时,出现以下错误:</p> <blockquote> <p>Fatal error: Call to a member function bind_param() on a non-object in...</p> </blockquote> <p>这是代码:</p> <pre class="brush:php;toolbar:false;">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);</pre> <p>为了检查我的查询,我尝试通过控制面板的phpMyAdmin执行查询,结果是正常的。</p>
P粉426906369
P粉426906369

全部回复(1)
P粉252116587

简而言之

  1. 在你的mysqli连接代码中始终使用mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);并且始终检查PHP错误。
  2. 始终用问号替换SQL查询中的每个PHP变量,并使用预处理语句执行查询。这有助于避免各种语法错误。

解释

有时你的mysqli代码会产生错误,如mysqli_fetch_assoc()期望参数1为mysqli_result,但实际得到的是布尔值...,调用bind_param()的成员函数...或类似的错误。甚至没有任何错误,但查询仍然无效。这意味着你的查询未能执行。

每当查询失败时,MySQL都会有一个错误消息来解释原因。在旧版本的PHP中,这些错误消息没有传递给PHP,你只会得到上面提到的晦涩的错误消息。因此,非常重要的是将PHP和mysqli配置为向你报告MySQL错误。一旦你得到错误消息,你就可以修复错误。

如何获取MySQL中的错误信息

首先,在所有环境中,在mysqli连接之前始终添加以下代码行:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

在此之后,所有的MySQL错误将被转换为PHP异常。未捕获的异常将导致PHP致命错误。因此,如果出现MySQL错误,您将收到一个常规的PHP错误。这将立即让您意识到错误的原因。而堆栈跟踪将引导您到错误发生的确切位置。

如何从PHP获取错误信息

在开发服务器上,确保错误信息在屏幕上显示出来,而在生产服务器上,请检查错误日志。请参阅我关于PHP错误报告的文章,了解详细信息。

请注意,在进行AJAX调用时,在开发服务器上打开开发者工具(F12),然后切换到网络选项卡。然后发起您想要查看结果的请求,它将出现在网络选项卡中。点击它,然后切换到响应选项卡。您将在那里看到确切的输出。在生产服务器上,请检查错误日志。


如何处理您收到的错误信息

首先,您需要找到问题查询。错误信息中包含了发生错误的文件名和行号。对于简单的代码来说,这已经足够了,但如果您的代码使用了函数或类,您可能需要跟踪堆栈以找到问题查询。

在获取错误信息后,您需要阅读并理解它。这听起来可能太明显了,但学习者经常忽视一个事实,即错误信息不仅仅是一个警报信号,它实际上包含了问题的详细解释。您只需要阅读错误信息并修复问题即可。

  • 如果错误信息显示某个表不存在,您需要检查拼写、错字和大小写。另外,您还需要确保您的 PHP 脚本连接到了正确的数据库。
  • 如果错误信息显示 SQL 语法错误,那么您需要检查您的 SQL 语句。问题所在应该是在错误信息中引用的查询部分之前。

如果您不理解错误信息,可以尝试在谷歌上搜索。在浏览结果时,要选择那些解释错误而不是直接给出解决方案的答案。解决方案可能在您的特定情况下不起作用,但解释将帮助您理解问题,并使您能够自行解决问题。

您还需要相信错误信息。如果错误信息说令牌数量与绑定变量数量不匹配,那就是这样。对于缺少的表或列也是一样。在选择时,无论是您自己的错误还是错误信息错误,始终坚持前者。再次强调,这听起来可能有些傲慢,但这个网站上的数百个问题证明了这个建议的极大用处。

Basic debugging

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

  1. 执行过程中发生了错误。已在上面解释过了。
  2. 由于程序逻辑错误,SQL根本没有运行。添加临时调试输出,确保代码达到执行查询的点。
  3. SQL已成功执行,但结果在错误的数据库中查看。请再次仔细检查。
  4. 输入的数据与数据库不匹配。以下是一些建议,可以用来检查它
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板