1. 程式人生 > >TP裏where的查詢方式,比如or應該怎麽寫?

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

class 直接 查詢方式 back 邏輯與 from sql語句 默認 是個

這應該是個基礎。。只是我沒有系統的學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版本以上,當開啟調試模式的話,則會拋出異常,顯示:錯誤的查詢條件

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