PHP注意:类mysqli_result的对象无法在中转换为int



我得到错误PHP注意:在必须将旧的PHP应用程序升级到最新的PHP和mySQL后,类mysqli_result的对象无法转换为int,并且无法确定问题在第512行,也就是下面的if语句。我正在使用MySqli包装类>https://www.ricocheting.com/static/code/php/mysql-v3.5/Database.singleton.txt

function check_database($table_name) {
$db = Database::obtain();
$sql = "DESCRIBE ".$table_name;
$data = $db->query($sql);
if($data == 0) {
return false;
} else
return true;
}

$db->query()返回0mysqli_result对象。带有DESCRIBE查询的代码看起来像是用来检查是否存在特定的表。如果表不存在,则DESCRIBE查询将失败,$db->query()将返回0。如果表确实存在,则查询将成功,并且$db->query()将返回一个mysqli_result对象。

使用if($data == 0)检查查询是否失败将导致PHP尝试将mysqli_result对象强制转换为整数,以便将其与整数0进行比较。这是不可能的。您的代码将正常工作(因为not-a-readable-integer-value不等于0(,但它会发出通知,通知您该问题。

你可能总是收到这个通知,但错误消息被抑制了,所以你没有看到它

为了避免出现这种情况,并且检查仍能正常工作,您需要停止PHP尝试将对象强制转换为整数。你可以通过===检查来做到这一点,它更严格:

function check_database($table_name) {
$db = Database::obtain();
$sql = "DESCRIBE ".$table_name;
$data = $db->query($sql);
if($data === 0) {
return false;
} else
return true;
}

对于===,PHP将执行的第一个检查是"这两个东西都是同一类型的吗",基本上是"它们都是整数吗"或"它们都不是mysqli_result对象"(取决于比较的左侧,$data,所以这取决于查询是否成功(。只有当两者都是整数时,它才会检查两者是否都是0。如果它们是不同类型的,它将立即传递到else块,并且您的代码仍将按预期工作。

最新更新