Codeigniter删图报错:Trying to get property 'gambar' of non-object
解决 "Trying to get property 'gambar' of non-object" 错误
嘿,这个错误其实很好排查,我来给你一步步分析和解决:
错误原因
你这段代码的问题在于链式调用时没有检查查询结果是否存在:
$this->db->get_where('artikel', array('id'=>$id))->row()->gambar;
当get_where没有找到对应id的artikel记录时,row()会返回null,这时候你直接访问null->gambar,就会触发这个“获取非对象的属性”错误。另外,就算找到记录,如果gambar字段是空的,直接unlink也会出问题。
修复后的代码
我们需要在每一步都做安全校验,避免意外错误:
private function hapusGbr($id){ // 先执行查询并获取结果对象 $query = $this->db->get_where('artikel', array('id'=>$id)); // 检查是否存在匹配的记录 if ($query->num_rows() > 0) { $artikel = $query->row(); // 确保gambar字段不为空 if (!empty($artikel->gambar)) { $filePath = "gambar/" . $artikel->gambar; // 检查文件是否真的存在,再执行删除 if (file_exists($filePath)) { unlink($filePath); } else { // 可选:记录日志,提示文件不存在 log_message('warning', '尝试删除不存在的文件:' . $filePath); } } } else { // 可选:记录日志,提示未找到对应文章 log_message('warning', '未找到ID为' . $id . '的文章,无法删除图片'); } }
额外注意事项
- 路径正确性:如果是用CodeIgniter框架(从代码风格看很像),建议用框架提供的常量拼接绝对路径,比如
$filePath = FCPATH . "gambar/" . $artikel->gambar;,避免相对路径导致的找不到文件问题。 - 权限问题:确保服务器进程(比如www-data)拥有
gambar目录的写入/删除权限,不然就算代码正确,unlink也会失败。 - 日志记录:添加日志可以帮你快速定位问题,比如文件不存在、记录不存在这类情况,方便后续排查。
内容的提问来源于stack exchange,提问作者Kaine
相关产品推荐
相关产品推荐

