首頁 php框架 ThinkPHP 如何使用thinkphp5.1的陣列查詢對象

如何使用thinkphp5.1的陣列查詢對象

Jul 08, 2021 am 09:19 AM
php thinkphp5

用過5.0的開發者都比較依賴5.0的陣列查詢方式,但是很無奈5.1的陣列查詢方式和5.0的差別很大,因此常聽到開發者抱怨5.1的陣列查詢不好用。

首先,出於安全和易用性的原因,官方是不推薦使用數組查詢條件的,其次,你也許不知道5.1版本其實提供了一個新的數組對象查詢的方式用以取代先前的數組條件。

如果你的版本是V5.1.21 的話,那麼可以嘗試下面提到的陣列物件查詢方式,一定會有意外的驚喜^_^

對於習慣或重度依賴陣列查詢條件的使用者來說,可以選擇數組物件查詢,該物件完成了普通數組方式查詢和系統的查詢表達式之間的橋接,但相較於系統推薦的查詢表達式方方式而言,需要注意變數的安全性,避免產生SQL注入的狀況。

要使用陣列物件查詢,你首先需要引入thinkdbWhere類別。

use think\db\Where;
登入後複製

Where物件的用法一般有兩種,第一種最簡單,你依然和5.0一樣使用數組條件進行定義查詢條件,例如:

$map = [
    'name'   => ['like', 'thinkphp%'],
    'title'  => ['like', '%think%'],
    'id'     => ['>', 10],
    'status' => 1,
];
登入後複製

然後,在實際使用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
登入後複製

這種方式最容易改造,相當於一鍵切換到5.0的陣列查詢方式。當然,除了Db查詢之外,模型查詢也一樣可以支援。

第二種方式是,直接實例化一個Where對象,然後在where方法查詢的時候直接傳入該Where物件實例。

$where          = new Where;
$where['id']    = ['in', [1, 2, 3]];
$where['title'] = ['like', '%php%'];

Db::name('user')
    ->where($where)
    ->select();
登入後複製

Where物件實作了ArrayAccess接口,因此可以直接當成數組來賦值。

產生的SQL是:

SELECT * FROM `think_user` WHERE   `id` IN (1,2,3) AND `title` LIKE '%php%'
登入後複製

使用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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles