CodeIgniter 2.1.0 的 like() 方法的 $side 参数添加了“both”通配符,尽管设置为“none”

问题描述 投票:0回答:1

根据文档,将第三个参数“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()
方法,但我很好奇。

我正在使用 CodeIgniter 2.1.0。

php codeigniter activerecord sql-like codeigniter-2
1个回答
1
投票

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

然后看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}'";
}
...
© www.soinside.com 2019 - 2024. All rights reserved.