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