ThinkPHP5.1: 配列オブジェクトクエリの使用

爱喝马黛茶的安东尼
リリース: 2019-12-16 16:04:12
転載
3996 人が閲覧しました

ThinkPHP5.1: 配列オブジェクトクエリの使用

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:thinkphp.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート