我试图插入的原始查询是:
SELECT * FROM x WHERE CONCAT(y, ' ', x) LIKE '%value%';
我已通过AR文档检查过,找不到任何可以让我这样做的内容。我不太熟悉它是如何构建这些查询的,并且希望有人可以指出我正确的方向。非常感谢。
答案 0 :(得分:8)
如果要使用AR类,则需要将FALSE作为第三个参数传递,以避免查询被自动转义。你现在只能自己逃避争论:
$value = $this->db->escape_like_str($unescaped);
$this->db->from('x');
$this->db->where("CONCAT(y, ' ', x) LIKE '%".$value."%'", NULL, FALSE);
$result = $this->db->get();
请参阅本手册的Active Record会话中的第4点)。引用:
Custom string:
You can write your own clauses manually:
$where = "name='Joe' AND status='boss' OR status='active'";
$this->db->where($where);
$this->db->where() accepts an optional third parameter. If you set it to FALSE, CodeIgniter will not try to protect your field or table names with backticks.
$this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE);
一种更简单的方法,即imho,可以运行“常规”查询并利用绑定:
$result = $this->db->query("CONCAT(y, ' ', x) LIKE '%?%'", array($value));
答案 1 :(得分:0)
这样的事情应该有效:
$this->db->where("CONCAT(y, ' ', x) LIKE '%value%'");
$this->db->get(x);
答案 2 :(得分:0)
或者在不使用第三个参数的情况下使用关联数组方法:
$a = array(
'CONCAT(`y`, " ", `x`)' => $value,
'title' => $title,
...
);
...
$this->db->like($a);
将生成WHERE部分查询:
... WHERE CONCAT(`y`, " ", `x`) LIKE '%test value%' AND `title` LIKE '%test title%' AND ...
使用多个搜索参数时显然很有用。
答案 3 :(得分:0)
这已经过时了......
你可以试试这个:
$this->db->like('CONCAT(field_name," ",field_name_b)',$this->db->escape_like_str('value'));