根据文档,将'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()
方法,但我很好奇。
答案 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}'";
}
...