CI によるデータベース ステートメントの操作は、括弧の問題など、非常に便利な場合もあれば、厄介な場合もあります。括弧に関する問題は、and と or の間の優先関係を扱うことから発生します。
場合によっては、or は and よりも高い必要があります。 $this->db->where() と $this->db->orwhere() を実行する方法。
最初の方法: SQL ステートメントを自分で書きます。しかし、すでに作成されたプログラムを変更するのが難しい場合もあります。
2 番目: where ステートメントを自分で作成すると、このような問題が発生する可能性があります。
where() と orwhere() は実際には同じ関数です。
マニュアルには次の段落があります:
$this->db->where();
この関数を使用すると、4 つのメソッドのいずれかを使用して WHERE 句を設定できます:
説明: this に渡します。安全なクエリを生成するために、関数のすべての値は自動的にエスケープされます。
単純なキー/値メソッド: $this->db->where('name', $name);等号が追加されていることに注意してください。 。
この関数を複数回呼び出すと、これらの条件は AND で結合されます:
$this->db->where('name', $name);最初のパラメータに演算子を含めて比較を制御できます:
$this->db->where('name !=', $name); ->where('id <', $id);$where = "name='Joe' AND status='boss' OR status='active'";
$this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE);
赤でマークされている場所は、No.4 が言ったことです。 :
実際には、そうではありません。働かないよ。 where() はステートメントに `` を追加し、次のように言います:
"`name='Joe' AND status='boss' OR status='active'`" SQL ステートメントにエラーがあります。
ソース コードを変更します:
CI フォーラムには次の段落があります:
... ...
like 配列に括弧を追加するだけです。 systemdatabasedb_act_active_chp
aboutline1559
php
$ SQL. = IMPLODE ("n", $ this -& gt; ar_like) }
CI 開発者が or_like が内部的に括弧を形成できないバグを修正できることを願っています。できるだけ早く
このフォーラムは非常に愚かです。改行文字 n が表示されると、PHP を知っている人は自分でそれを追加できます。
出典: http://codeigniter.org.cn/forums/thread-1270-1-1.html
同様に、where も変更できますが、これは where ステートメントの先頭と末尾にのみ追加されます。