まず第一に、セキュリティと使いやすさの理由から、配列クエリ条件を使用することは公式には推奨されていません。第二に、バージョン 5.1 が実際に新しい配列を提供していることを知らないかもしれません。オブジェクト。クエリ メソッドは、前の配列条件を置き換えるために使用されます。お使いのバージョンが V5.1.21 の場合は、以下で説明する配列オブジェクトのクエリ方法を試してみてください。間違いなく予期せぬ驚きが得られるでしょう^_^
これに慣れている人、またはよく依存している人にとっては、配列クエリ 条件を持つユーザーの場合は、配列オブジェクト クエリを選択できます。このオブジェクトは、通常の配列クエリとシステム クエリ式の間のブリッジを完了します。ただし、システムが推奨するクエリ式メソッドと比較すると、変数に注意する必要があります。 SQL インジェクションを回避するセキュリティ。
配列オブジェクト クエリを使用するには、まず thinkdbWhere クラスを導入する必要があります。
use think\db\Where;
Where オブジェクトを使用するには、通常 2 つの方法があります。最初の方法が最も単純です。5.0 のようなクエリ条件を定義するには、引き続き配列条件を使用します。たとえば:
$map = [ 'name' => ['like', 'thinkphp%'], 'title' => ['like', '%think%'], 'id' => ['>', 10], 'status' => 1, ];
Then where の実際の使用方法 メソッドを
Db::name('user') ->where(new Where($map)) ->select();
に変更すると、生成される SQL は次のようになります。
SELECT * FROM `think_user` WHERE `name` LIKE 'thinkphp%' AND `title` LIKE '%think%' AND `id` > 10 AND `status` =1
このメソッドは変更が最も簡単で、1 つの変更で 5.0 の配列クエリ メソッドに切り替えるのと同等です。クリック。もちろん、Db クエリに加えて、モデル クエリもサポートされています。
2 番目の方法は、Where オブジェクトを直接インスタンス化し、where メソッドをクエリするときに Where オブジェクトのインスタンスを直接渡す方法です。
$where = new Where; $where['id'] = ['in', [1, 2, 3]]; $where['title'] = ['like', '%php%']; Db::name('user') ->where($where) ->select();
オブジェクトは ArrayAccess インターフェイスを実装しているため、配列として直接割り当てることができます。
生成される SQL は次のとおりです:
SELECT * FROM `think_user` WHERE `id` IN (1,2,3) AND `title` LIKE '%php%'
Using Where オブジェクト クエリは他のクエリ メソッドと混合できます。配列クエリ オブジェクトを混在させるときに配列クエリ オブジェクトのクエリ条件にかっこを追加する場合は、
$where = new Where; $where['id'] = ['in', [1, 2, 3]]; $where['title'] = ['like', '%php%']; Db::name('user') ->where($where->enclose()) ->where('status', 1) ->select();
を使用できます。生成される SQL は次のとおりです:
SELECT * FROM `think_user` WHERE ( `id` IN (1,2,3) AND `title` LIKE '%php%' ) AND `status` =1
enclose メソッドはクエリを表します. 条件は両側の括弧で囲まれます。
配列オブジェクトを使用してクエリを実行する場合は、必ずデータ型を確認し、SQL インジェクションの可能性があるユーザーにデータを決定させないように注意してください。
関連する推奨事項: 最新の 10 件の thinkphp ビデオ チュートリアル