TP里where的查詢方式,比如or應該怎么寫?


這應該是個基礎。。只是我沒有系統的學TP,所以用到了臨時查了手冊。

正常來說,thinkphp里的查詢方式是:

 

ThinkPHP可以支持直接使用字符串作為查詢條件,但是大多數情況推薦使用數組或者對象來作為查詢條件,因為會更加安全。

使用字符串作為查詢條件

這是最傳統的方式,但是安全性不高,例如:

$User = M("User"); // 實例化User對象 $User->where('type=1 AND status=1')->select(); 

最后生成的SQL語句是

SELECT * FROM think_user WHERE type=1 AND status=1 

采用字符串查詢的時候,我們可以配合使用字符串條件的安全預處理機制。

使用數組作為查詢條件

這種方式是最常用的查詢方式,例如:

$User = M("User"); // 實例化User對象 $condition['name'] = 'thinkphp'; $condition['status'] = 1; // 把查詢條件傳入查詢方法 $User->where($condition)->select(); 

最后生成的SQL語句是

SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1 

如果進行多字段查詢,那么字段之間的默認邏輯關系是 邏輯與 AND,但是用下面的規則可以更改默認的邏輯判斷,通過使用 _logic 定義查詢邏輯

$User = M("User"); // 實例化User對象 $condition['name'] = 'thinkphp'; $condition['account'] = 'thinkphp'; $condition['_logic'] = 'OR'; // 把查詢條件傳入查詢方法 $User->where($condition)->select(); 

最后生成的SQL語句是

SELECT * FROM think_user WHERE `name`='thinkphp' OR `account`='thinkphp' 

使用對象方式來查詢

這里以stdClass內置對象為例:

$User = M("User"); // 實例化User對象 // 定義查詢條件 $condition = new stdClass(); $condition->name = 'thinkphp'; $condition->status= 1; $User->where($condition)->select(); 

最后生成的SQL語句和上面一樣

SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1 

使用對象方式查詢和使用數組查詢的效果是相同的,並且是可以互換的,大多數情況下,我們建議采用數組方式更加高效。

在使用數組和對象方式查詢的時候,如果傳入了不存在的查詢字段是會被自動過濾的,例如:

$User = M("User"); // 實例化User對象 $condition['name'] = 'thinkphp'; $condition['status'] = 1; $condition['test'] = 'test'; // 把查詢條件傳入查詢方法 $User->where($condition)->select(); 

因為數據庫的test字段是不存在的,所以系統會自動檢測並過濾掉$condition['test'] = 'test'這一查詢條件。

如果是3.2.2版本以上,當開啟調試模式的話,則會拋出異常,顯示:錯誤的查詢條件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM