CodeIgniter中jQuery DataTables服务端模式失效求助
解决CodeIgniter + jQuery DataTables服务端模式的SQL 1096错误
嘿,这个问题我太熟悉了!你遇到的错误编号1096: 未使用表,本质就是生成的SQL语句SELECT * ORDER BY id_judul ASC LIMIT 2缺了关键的FROM [你的数据表名]部分——数据库根本不知道要从哪张表里取数据,可不就报错嘛。错误定位在Judul_model.php第88行,说明这一行的查询逻辑没正确指定数据表,咱们一步步来修:
第一步:揪出Model里的问题(重点看第88行)
先打开Judul_model.php找到第88行,大概率是构建查询的代码漏了指定数据表。分两种情况看:
如果你用的是CodeIgniter的Active Record
错误的写法(可能你现在就是这样):
// 这里没指定要查的表! $this->db->select('*'); $this->db->order_by('id_judul', 'ASC'); $this->db->limit(2); $query = $this->db->get(); // get()里没传表名,也没提前用from()指定
修复后的正确写法:
要么在get()里直接传数据表名(比如你的表叫judul),要么提前用from()指定:
$this->db->select('*'); $this->db->from('judul'); // 先指定表 $this->db->order_by('id_judul', 'ASC'); $this->db->limit(2); $query = $this->db->get(); // 或者更简洁的链式写法: $query = $this->db->select('*') ->from('judul') ->order_by('id_judul', 'ASC') ->limit(2) ->get();
如果你用的是原生SQL拼接
那就是写SQL的时候漏了FROM子句:
// 错误写法 $sql = "SELECT * ORDER BY id_judul ASC LIMIT 2"; // 修复写法,加上FROM和你的表名 $sql = "SELECT * FROM judul ORDER BY id_judul ASC LIMIT 2"; $query = $this->db->query($sql);
第二步:验证Controller的调用逻辑
确保Controller在调用Model的查询方法时,没遗漏必要的参数(比如如果Model是动态指定表的话)。举个例子:
// Controller里的方法 public function get_datatables() { // 调用Model的查询方法时,确保Model内部已经正确指定了表 $list = $this->judul_model->get_datatables(); // ... 剩下的DataTables返回逻辑 }
如果你的Model是靠传参指定表,那得确认Controller传对了:
// Controller里 $target_table = 'judul'; $list = $this->judul_model->get_datatables($target_table); // Model里对应的方法 public function get_datatables($table) { $this->db->from($table); // 用传进来的表名 // ... 其他查询逻辑 }
第三步:快速调试小技巧
要是还拿不准,就在Model执行查询前加一行代码,把最终生成的SQL打出来看看:
// 在$query = $this->db->get(); 之前加 echo $this->db->last_query(); die();
这样就能直接看到生成的SQL是不是真的缺了FROM子句,一目了然。另外也检查下Model里有没有什么条件判断,会不会导致from()或者指定表的代码被跳过了(比如某个if条件不满足,没执行到指定表的逻辑)。
内容的提问来源于stack exchange,提问作者Hendra
相关产品推荐
相关产品推荐

