5.0 を使用した開発者は 5.0 の配列クエリ方式に依存する傾向がありますが、残念ながら 5.1 の配列クエリ方式は 5.0 とは大きく異なるため、開発者が 5.1 について不満を言うのをよく聞きます。配列クエリは使いにくいです。
まず第一に、セキュリティと使いやすさの理由から、公式は配列クエリ条件の使用を推奨していません。第二に、バージョン 5.1 が実際に新しい配列オブジェクト クエリを提供していることを知らないかもしれません。メソッド。前の配列条件を置き換えるために使用されます。
お使いのバージョンが V5.1.21 の場合は、以下で説明する配列オブジェクトのクエリ方法を試してみてください。きっと予想外の驚きが得られるでしょう^_^
慣れている方にとっては、配列クエリ条件に依存するユーザーの場合は、配列オブジェクト クエリを選択できます。このオブジェクトは、通常の配列クエリとシステム クエリ式の間のブリッジを完了します。ただし、システムが推奨するクエリ式メソッドと比較すると、注意が必要ですSQL インジェクションを回避するための変数セキュリティ。
配列オブジェクト クエリを使用するには、まず think\db\Where クラスを導入する必要があります。
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 インジェクションの可能性があるユーザーにデータを決定させないように注意してください。
PHP 中国語 Web サイトには、無料の ThinkPHP 入門チュートリアル が多数あり、誰でも学習することができます。
この記事はhttps://blog.thinkphp.cn/778497
から転載されています。以上がThinkPHP5.1: 配列オブジェクトクエリの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。