每当你得到...
“警告:mysqli_fetch_object()期望参数1为mysqli_result,给定布尔值”
...这很可能是因为您的查询有问题。的prepare()
或query()
可能会返回FALSE
(布尔),但这种通用的失败消息不离开你在多线索的方式。您如何找出查询的问题?你问!
首先,请确保已打开错误报告并使其可见:将这两行添加到文件开头(紧接在您的开始<?php
标记之后):
error_reporting(E_ALL);
ini_set('display_errors', 1);
如果您在php.ini中设置了错误报告,则无需担心。只要确保您能正确处理错误,并且永远不要向用户透露任何问题的真正原因。向公众揭示真正的原因可以是那些想要损害您的站点和服务器的人的金色雕版邀请。如果您不想将错误发送到浏览器,则可以随时监视Web服务器错误日志。日志位置因服务器而异,例如,在Ubuntu上,错误日志通常位于/var/log/apache2/error.log
。如果您正在Linux环境中检查错误日志,则可以tail -f /path/to/log
在控制台窗口中使用它来实时查看错误或创建错误。
一旦您不了解标准错误报告,就可以在数据库连接和查询中添加错误检查,这将为您提供有关发生的问题的更多详细信息。看一下此示例,其中列名不正确。首先,返回一般致命错误消息的代码:
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
该错误是一般性错误,对您解决正在发生的事情不是很有帮助。
通过使用几行代码,您可以获得非常详细的信息,您可以使用这些信息立即解决问题。检查prepare()
语句的真实性,如果这很好,则可以继续进行绑定和执行。
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
// any additional code you need would go here.
} else {
$error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
// handle error
}
如果出现问题,您可以吐出一条错误消息,直接将您带到问题所在。在这种情况下,foo
表中没有列,解决该问题是微不足道的。
如果选择,可以将此检查包括在函数或类中,并通过如前所述优雅地处理错误来扩展它。