怎么处理mysqli的问题?例如出现mysqli_fetch_array():参数#1必须是mysqli_result类型的错误。
P粉426906369
2023-07-24 16:47:03
<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>
简而言之
解释
有时你的mysqli代码会产生错误,如mysqli_fetch_assoc()期望参数1为mysqli_result,但实际得到的是布尔值...,调用bind_param()的成员函数...或类似的错误。甚至没有任何错误,但查询仍然无效。这意味着你的查询未能执行。
每当查询失败时,MySQL都会有一个错误消息来解释原因。在旧版本的PHP中,这些错误消息没有传递给PHP,你只会得到上面提到的晦涩的错误消息。因此,非常重要的是将PHP和mysqli配置为向你报告MySQL错误。一旦你得到错误消息,你就可以修复错误。
如何获取MySQL中的错误信息
首先,在所有环境中,在mysqli连接之前始终添加以下代码行:
在此之后,所有的MySQL错误将被转换为PHP异常。未捕获的异常将导致PHP致命错误。因此,如果出现MySQL错误,您将收到一个常规的PHP错误。这将立即让您意识到错误的原因。而堆栈跟踪将引导您到错误发生的确切位置。
如何从PHP获取错误信息
在开发服务器上,确保错误信息在屏幕上显示出来,而在生产服务器上,请检查错误日志。请参阅我关于PHP错误报告的文章,了解详细信息。
请注意,在进行AJAX调用时,在开发服务器上打开开发者工具(F12),然后切换到网络选项卡。然后发起您想要查看结果的请求,它将出现在网络选项卡中。点击它,然后切换到响应选项卡。您将在那里看到确切的输出。在生产服务器上,请检查错误日志。
如何处理您收到的错误信息
首先,您需要找到问题查询。错误信息中包含了发生错误的文件名和行号。对于简单的代码来说,这已经足够了,但如果您的代码使用了函数或类,您可能需要跟踪堆栈以找到问题查询。
在获取错误信息后,您需要阅读并理解它。这听起来可能太明显了,但学习者经常忽视一个事实,即错误信息不仅仅是一个警报信号,它实际上包含了问题的详细解释。您只需要阅读错误信息并修复问题即可。
如果您不理解错误信息,可以尝试在谷歌上搜索。在浏览结果时,要选择那些解释错误而不是直接给出解决方案的答案。解决方案可能在您的特定情况下不起作用,但解释将帮助您理解问题,并使您能够自行解决问题。
您还需要相信错误信息。如果错误信息说令牌数量与绑定变量数量不匹配,那就是这样。对于缺少的表或列也是一样。在选择时,无论是您自己的错误还是错误信息错误,始终坚持前者。再次强调,这听起来可能有些傲慢,但这个网站上的数百个问题证明了这个建议的极大用处。
Basic debugging
如果您的查询似乎不起作用,可能有以下四个原因: