php - 我正在处理 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;
}
解决方案
看来您正在使用 mysqli 扩展。
如果您查看文档,mysqli::query
它会说:
失败时返回 FALSE。对于成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,mysqli_query() 将返回一个 mysqli_result 对象。
在您的示例中,您始终假设查询有效,允许您访问mysqli_result::$num_rows
. 但是由于您从不检查查询的返回值,因此当它失败时,您基本上会得到类似false->num_rows
. 这就是您收到通知的原因。
现在,要检查查询失败的原因,您可以尝试检查$mysqli->error
,在您的示例中为$db->error
.
推荐阅读
- git - 为什么 git 不给我任何冲突?
- reactjs - 反应redux reducer将对象添加到对象中的数组
- shell - 错误选项 -t shell 集成 bash
- kubernetes-helm - 在 kubernetes 上运行 eclipse/che 本地映像
- c# - .editorconfig 命名约定不起作用
- laravel - 多重关系
- javascript - ReactJS - 是否可以调整 scrollIntoView 的功能以适应我页面导航的需要?
- c# - 添加 Ref 或 Out 关键字让我出现错误“Argument 1 may not be pass with Ref KeyWord”,这导致我的程序停止工作
- javascript - 为什么在使用 for 命令时会向我抛出“Unexpected token )”?
- php - 放入 S3 预签名 URL 时如何修复“403 Forbidden”