3

ここにプラグインしようとしている生のクエリは次のとおりです。

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

AR ドキュメントを確認しましたが、これを可能にするものが見つかりません。これらのクエリがどのように構築されているかについてはあまり詳しくありません。誰かが私を正しい方向に向けてくれることを望んでいました。本当にありがとう。

4

4 に答える 4

9

ARクラスを使用する場合は、クエリが自動的にエスケープされないように、3番目のパラメーターとして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();

マニュアルのActiveRecordセッションのポイント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

これは古いですが...

これを試すことができます:

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