任何时候你得到…
警告: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();
这个错误是一般性的,对你解决问题没有多大帮助。
通过多行代码,您可以获得非常详细的信息,可以用来解决问题
立即
. 检查
准备()
声明的真实性,如果它是好的,你可以继续绑定和执行。
$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;
echo $error; // 1054 Unknown column 'foo' in 'field list'
}
如果出了什么问题,您可以弹出一条错误消息,将您直接带到问题。在这种情况下
foo
在表中的列中,解决问题很简单。
如果您选择,您可以将此签入包含在函数或类中,并通过优雅地处理前面提到的错误来扩展它。