ホームページ >PHPフレームワーク >ThinkPHP >thinkphp5.1で配列クエリオブジェクトを使用する方法

thinkphp5.1で配列クエリオブジェクトを使用する方法

藏色散人
藏色散人転載
2021-07-08 09:19:432191ブラウズ

5.0 を使用した開発者は、5.0 の配列クエリ メソッドへの依存度が高くなりますが、5.0 の配列クエリ メソッドとの違いについては無知です。 5.1 と 5.0 の配列クエリ方法 非常に大きいため、5.1 の配列クエリは使いにくいという開発者の不満をよく聞きます。

まず第一に、セキュリティと使いやすさの理由から、配列クエリ条件を使用することは公式には推奨されていません。第二に、バージョン 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 ビデオ チュートリアル

以上がthinkphp5.1で配列クエリオブジェクトを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。