0

根据文档,将“none”的第三个参数传递给 like 方法应该消除在 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()方法,但我很好奇。

4

1 回答 1

1

看起来“none”的代码似乎不包含在 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}'";
}
...
于 2012-12-21T15:33:26.417 回答