在使用CI框架的时候, 经常的Active Record 类,这时候会出现一个问题

  使用Active Record 类组成的sql 中,为了防止sql注入,会自动的在表名,字段名 自动添加反引号

  当然这是极好的,但是有时候会出现一些小问题

  预计生成的sql     HAVING user_id > 45

  $this->db->having('user_id > 45'); 
  官方文档: // 生成: HAVING user_id > 45

  实际生成: // 生成: HAVING `user_id > 45`

  $this->db->having('user_id>', 45);

  实际生成: // 生成: HAVING `user_id>` = 45

  可以发现,因为CI会自动添加反引号,导致我的sql 不能达到预期的效果

  仔细翻找文档发现

  $this->db->select('id',false)中有提到,第二个参数中添加false可以去掉反引号

  但并没有说明在Active Record 方法中都适用,于是突发奇想,是不是否可以这样呢

  添加第三个参数false,去掉了反引号,达到了预期的sql语句

  $this->db->having('user_id >', 45, false);

  //生成 :HAVING user_id > 45

05-11 18:26