CodeIgniter Active Record与第三个参数一样

时间:2012-12-21 15:12:19

标签: codeigniter activerecord sql-like

根据文档,将'none'的第三个参数传递给like方法应该可以消除在类似搜索查询中使用通配符。

我这样做,其中$ search =='test_username':

$this->db->like('username', $search, 'none');
$this->db->limit(1);
$q = $this->db->get('customers')->row();
var_dump($this->db->last_query());exit;

我希望看到这个回显到屏幕上:

SELECT * FROM (`ci_customers`) WHERE `username` LIKE 'test_username' LIMIT 1

但我得到了这个:

SELECT * FROM (`ci_customers`) WHERE `username` LIKE '%test_username%' LIMIT 1

看起来这个方法忽略了第三个参数,或者我做错了什么。有任何想法吗?我可以写出我的查询并使用query()方法,但我很好奇。

1 个答案:

答案 0 :(得分:1)

看起来好像“无”的代码不包含在2.1.0版本中。请查看https://github.com/EllisLab/CodeIgniter/blob/v2.1.0/system/database/DB_active_rec.php#L639上的第649-692行。

然后查看2.1.3版本的第664行:https://github.com/EllisLab/CodeIgniter/blob/2.1.3/system/database/DB_active_rec.php#L639

您需要升级,或将其添加到DB_active_rec.php文件中:

...
if ($side == 'none')
{
  $like_statement = $prefix." $k $not LIKE '{$v}'";
}
...