使用$this->db从MySQL的videos表获取IMDb id报错如何解决
问题排查与解决方案
以下排查基于CodeIgniter框架数据库查询构造器的语法规则:
原有代码错误点
- 代码1:
get_where()第二个参数要求传入查询条件键值对数组,仅传入单元素数组array('imdbid')不符合参数要求,同时该写法没有指定查询字段,会默认查询表中所有字段。
// 错误写法 $imdb_id = $this->db->get_where('videos', array('imdbid'))->result_array();
- 代码2:
get()第二个参数是查询返回的行数,不可传入字段名imdbid指定查询字段,参数类型不匹配导致报错。
// 错误写法 $imdb_id = $this->db->get('videos','imdbid');
- 代码3:
row()方法第二个参数传入自定义类名时,返回结果为对象类型,使用数组语法$row['imdbid']取值会报类型错误;同时未指定筛选条件时默认取第一行数据,不符合全量获取imdb id的需求。
// 错误写法 $query = $this->db->query("SELECT * FROM videos;"); $row = $query->row(0, 'videos'); $imdb_id = $row['imdbid'];
正确实现方案
场景1:获取videos表所有行的imdbid数组
$this->db->select('imdbid'); $query = $this->db->get('videos'); $imdb_ids = array_column($query->result_array(), 'imdbid');
场景2:获取指定条件的单行imdbid
// 示例:查询id为1的视频对应的imdbid,不存在则返回空字符串 $imdb_id = $this->db->get_where('videos', ['id' => 1])->row_array()['imdbid'] ?? '';
原生SQL写法
$query = $this->db->query("SELECT imdbid FROM videos"); $imdb_ids = array_column($query->result_array(), 'imdbid');
内容的提问来源于stack exchange,提问作者S M Khirul Alam
相关产品推荐
相关产品推荐

