首页 > 解决方案 > 我正在处理 CSV 导入脚本并不断收到 PHP 通知(尝试获取非对象的属性 'num_rows')

问题描述

我正在处理 CSV 导入脚本。我遇到了一条通知,上面写着“注意:试图获取非对象的属性 'num_rows'”。

function getWardByCode($ward, $area_id){
    global $db;

    $query = $db->query("SELECT `id` FROM `wards` WHERE `code`='{$db->real_escape_string($ward)}', `area_id`='{$db->real_escape_string($area_id)}' LIMIT 1");

    if (1 === $query->num_rows){
        $data = $query->fetch_assoc();
        return $data['id'];
    }

    $db->query("INSERT INTO `wards` (`code`, `area_id`) VALUES ('{$db->real_escape_string($ward)}', '{$db->real_escape_string($area_id)}')");

    return $db->insert_id;
}

标签: php

解决方案


看来您正在使用 mysqli 扩展。

如果您查看文档mysqli::query它会说:

失败时返回 FALSE。对于成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,mysqli_query() 将返回一个 mysqli_result 对象。

在您的示例中,您始终假设查询有效,允许您访问mysqli_result::$num_rows. 但是由于您从不检查查询的返回值,因此当它失败时,您基本上会得到类似false->num_rows. 这就是您收到通知的原因。

现在,要检查查询失败的原因,您可以尝试检查$mysqli->error,在您的示例中为$db->error.


推荐阅读