3

我试图在这里插入的原始查询是:

SELECT * FROM x WHERE CONCAT(y, ' ', x) LIKE '%value%';

我已经检查了 AR 文档,但找不到任何可以让我这样做的东西。我不太熟悉它是如何构建这些查询的,并希望有人能指出我正确的方向。谢谢一堆。

4

4 回答 4

9

如果要使用 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);

恕我直言,一种更简单的方法应该是运行“常规”查询并利用绑定:

$result = $this->db->query("CONCAT(y, ' ', x) LIKE '%?%'", array($value));
于 2013-02-08T21:52:27.950 回答
0

像这样的东西应该工作:

$this->db->where("CONCAT(y, ' ', x) LIKE '%value%'");

$this->db->get(x);
于 2013-02-08T21:45:55.800 回答
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 ...
在使用多个搜索参数时显然很有用。

于 2013-11-14T13:45:14.580 回答
0

这是旧的,但...

你可以试试这个:

$this->db->like('CONCAT(field_name," ",field_name_b)',$this->db->escape_like_str('value'));
于 2015-01-23T14:51:55.017 回答