我正在尝试在Codeigniter上使用like
查询。该函数将我的百分号%
转义为\%
。
我的查询是:
SELECT *
FROM (`invoices_rent`)
WHERE `clerk_name` = 'BEAUTY'
AND `date` LIKE '\%/\%/\%'
$this->db->like('date', $date, 'none');
我该怎么做才能防止百分号被转义?
我正在尝试使用可以接收数字或通配符的日期创建过滤器。所以我想要的是以一种我可以获得用户想要的月,年或日期的方式加入这些数据。所以我会转到查询“%/ 02/2015”或“%/%/ 2015”来返回我需要的数据范围。但是我遇到了关于函数转义的问题。 我想我需要创建整个查询,而不是使用这个CodeIgniter函数来创建它。遵循实际的模型功能。
$date = "%/03/2015";
public function getallinvoices($type = false, $date = false, $clerk = false)
{
if($type == "m")
$table = "invoice_month";
else
$table = "invoices_rent";
if($date != false)
$this->db->like('date', $date, 'none');
if($clerk != false && $clerk != "all")
$this->db->where('clerk_name', $clerk);
$query = $this->db->get($table);
$this->output->enable_profiler(TRUE);
print_r($query);
return $query->result_array();
}
我希望查询返回如下:
SELECT *
FROM (`invoices_rent`)
WHERE `clerk_name` = 'BEAUTY'
AND `date` LIKE '%/03/2015'
答案 0 :(得分:2)
我不确定你到底想要做什么。
添加第3个参数none
不会在值周围添加通配符(%)
(在您的情况下,它可能会escape
。
来自 docs :
如果您不想使用通配符(%),则可以将选项' none'传递给可选的第三个参数。
$ this-> db-> like(' title',' match',' none');
//生成:WHERE标题LIKE'匹配'
因此,如果您想使用通配符,只需删除第三个参数。
(仅供参考)
假设表,
`invoices_rent`
id rent invoice_number clerk_name date
1 150 INV001 BEAUTY 2015-03-04
2 250 INV002 BEAUTY01 2015-02-05
3 350 INV003 BEAUTY 2015-03-04
查询,
$date = '2015-03-04';
$this->db->like('date', $date);
$this->db->where('clerk_name');
$query = $this->db->get('invoices_rent');
return $query->result();
/**
* Result will give id: 1 & 3 as output
*/
修改强>
根据您更新的问题,基本上您想要2015年3月的所有行。您正在尝试的内容绝对不是查询日期范围时的正确方法。您可以做的就是获得月初(例如2014-03-01)和月末(2014-03-31)并使用between clause
,这将为您提供所有行月3月
以下是您的查询。
$month_start = date('Y-m-01', 'March'); # Month's start
$month_end = date('Y-m-t', 'March'); # Month's end
$this->db->where('date >=', $month_start);
$this->db->where('date <=', $month_end);
$this->db->where('clerk_name');
$query = $this->db->get('invoices_rent');
return $query->result();
/**
* Result will give id: 1 & 3 as output
*/