CodeIgniter框架查询返回空但MySQL执行该SQL有结果的问题求助
这种情况我之前踩过坑,明明手动在MySQL里跑SQL能拿到结果,CodeIgniter里就是返回空,给你几个实用的排查方向:
先确认框架实际跑的SQL是不是你想的那样
别想当然觉得生成的SQL是对的,执行查询后用$this->db->last_query()把实际执行的语句打出来看看:$query = $this->db->get(); echo $this->db->last_query();把输出的SQL复制到MySQL里再跑一遍,确认和你手动写的完全一致——有时候框架可能因为配置或者其他原因,生成的SQL和预期有差异。
检查
row()的使用是否合适$query->row()只返回结果集的第一条记录,如果结果集为空会直接返回NULL。你可以先看看结果集的行数:echo $query->num_rows();如果输出是1但
row()拿不到数据,试试换成$query->row_array()或者$query->result()来获取结果,有时候对象形式的row()可能因为字段名大小写、类属性冲突之类的小问题导致拿不到值。排查数据类型匹配问题
如果你的examid字段在数据库里是整数类型,而你传的是字符串'9',虽然MySQL会自动做类型转换,但CodeIgniter的查询绑定偶尔会因为这个隐性问题导致查询异常。试试把条件改成传整数:$this->db->where('examid', 9); // 去掉引号,直接传数值类型这个小改动有时候能解决看似无解的查询问题。
确认数据库连接的正确性
会不会你的CodeIgniter项目连接的是测试库,而你手动跑SQL的是生产库?去application/config/database.php里核对一下数据库名、用户名、密码,确保连接的是你手动查询的那个数据库。检查字符集和排序规则是否一致
如果数据库表的字符集和CodeIgniter配置的连接字符集不匹配,可能会导致查询时的隐性匹配失败。看看数据表的字符集设置,再对比database.php里的char_set和dbcollat配置,确保两者一致。
按照这些步骤一步步排查,应该能快速定位问题。
内容的提问来源于stack exchange,提问作者manish patel

