TP裏where的查詢方式,比如or應該怎麽寫?
阿新 • • 發佈:2019-04-03
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應該怎麽寫?