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

藏色散人
リリース: 2021-07-09 08:55:02
転載
2122 人が閲覧しました

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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!