CodeIgniter中SELECT查询返回空数组的问题求助
排查CodeIgniter查询返回空数组的问题
看起来你在CodeIgniter里根据项目ID和客户ID查询数据时遇到了空数组的问题,我来帮你一步步排查可能的原因:
1. 先确认传入的参数是否正确
首先要搞清楚你传给模型的$projectid和$clientid是不是你期望的值。可以在控制器里临时加一行打印代码:
// 在调用模型前添加 var_dump($projectid, $clientid);
- 检查这两个值的类型和数值是否正确,比如有没有可能参数传反了?虽然你控制器和模型的参数顺序是对的,但也要确认实际传入的
$projectid确实是项目的ID,$clientid是客户ID。
2. 打印生成的SQL语句,直接在数据库验证
CodeIgniter提供了查看最终执行SQL的方法,在模型的displayedit函数里,执行get()之后添加:
$query=$this->db->get('new_project'); echo $this->db->last_query(); // 打印最终执行的SQL return $query->result();
把打印出来的SQL复制到你的数据库管理工具(比如phpMyAdmin、Navicat)里直接执行,如果执行后也没有结果,说明你的数据库里确实没有满足id = [你的项目ID]且client_id = [你的客户ID]的记录,这时候要检查数据是否正确插入到new_project表中了。
3. 检查表名和字段名是否拼写正确
这是最容易忽略的问题:
- 确认表名是
new_project,有没有写错?比如是不是new_projects(复数形式)? - 确认主键字段是
id吗?有些项目里会用project_id作为项目表的主键,如果是这样,你模型里的$this->db->where('id', $projectid)就应该改成$this->db->where('project_id', $projectid)。 - 检查
client_id字段是否存在于new_project表中,且存储的数值类型和你传入的$clientid一致(比如都是整数,避免字符串和数字不匹配的情况)。
4. 强制转换参数类型
如果你的id和client_id是整数类型,但传入的参数是字符串(比如从URL获取的参数没转换),可能会导致匹配失败。可以在控制器里先转换参数类型:
$projectid = (int)$projectid; $clientid = (int)$clientid; $this->data['editval'] = $this->Add_project_m->displayedit($projectid, $clientid);
5. 检查软删除字段的影响
你查询里包含了delete_display字段,会不会这个字段是用来标记软删除的?比如如果该字段值为1表示已删除,而你的查询没有排除已删除的记录?如果是这种情况,可以在模型里添加过滤条件:
$this->db->where('delete_display !=', 1); // 根据你的实际逻辑调整
按照上面的步骤排查,应该能找到问题所在。如果直接执行SQL有结果,但CodeIgniter返回空数组,那可能是参数传递或者类型转换的问题。
内容的提问来源于stack exchange,提问作者Shantanu
相关产品推荐
相关产品推荐

