ThinkPHP中where()使用方法詳解
這篇文章主要介紹了關於ThinkPHP中where()使用方法詳解,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
where方法可以用於對資料庫操作的結果進行篩選。即SQL查詢語句中的where子句。本文為大家介紹ThinkPHP中where()使用方法詳解,有興趣的朋友參考下
本文介紹ThinkPHP的where()方法的用法。 where方法可以用於對資料庫操作的結果進行篩選。即SQL查詢語句中的where子句。
今天來跟大家講下查詢最常用但也是最複雜的where方法,where方法也屬於模型類別的連貫操作方法之一,主要用於查詢和操作條件的設定。
where方法的用法是ThinkPHP查詢語言的精髓,也是ThinkPHP ORM的重要組成部分和亮點所在,可以完成包括普通查詢、表達式查詢、快捷查詢、區間查詢、組合查詢在內的查詢操作。 where方法的參數支援字串和數組,雖然也可以使用物件但不建議。
字串條件
使用字串條件直接查詢和操作,例如:
$User = M("User"); // 实例化User对象 $User->where('type=1 AND status=1')->select();
最後產生的SQL語句是
SELECT * FROM think_user WHERE type=1 AND status=1
#如果使用3.1以上版本的話,使用字串條件的時候,建議配合預處理機制,確保更加安全,例如:
$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select();
或使用:
$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
字串預處理格式類型支援指定數字、字串等,具體可以參考vsprintf方法的參數說明。
陣列條件
陣列條件的where用法是ThinkPHP推薦的用法。普通查詢
最簡單的陣列查詢方式如下:$User = M("User"); // 实例化User对象 $map['name'] = 'thinkphp'; $map['status'] = 1; // 把查询条件传入查询方法 $User->where($map)->select();
最後產生的SQL語句是
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
#表達式查詢##上面的查詢條件只是一個簡單的相等判斷,可以使用查詢表達式支援更多的SQL查詢語法,查詢表達式的使用格式:
##
$map['字段1'] = array('表达式','查询条件1'); $map['字段2'] = array('表达式','查询条件2'); $Model->where($map)->select(); // 也支持
EQ 等於(=)NEQ 不等於(<>)
GT 大於(>)EGT 大於等於(>=)
LT 小於(<)
ELT小於等於(<=)
LIKE 模糊查詢
[NOT] BETWEEN (不在)區間查詢
[NOT] IN (不在)IN 查詢
EXP 表達式查詢,支援SQL語法
範例如下:
$map['id'] = array('eq',100);
$map['id'] = 100;
例如:
$map['id'] = array('neq',100);
表示的查詢條件就是id <> 100
GT:大於(>)
例如:
$map['id'] = array('gt',100);
表示的查詢條件是id > 100
EGT:大於等於(>=)
例如:
$map['id'] = array('egt',100);
表示的查詢條件是id >= 100
LT:小於(<)
例如:
$map['id'] = array('lt',100);
表示的查詢條件是id < 100
ELT: 小於等於(<=)
例如:
$map['id'] = array('elt',100);
所表示的查詢條件是id <= 100
[NOT] LIKE: 同sql的LIKE
例如:
$map['name'] = array('like','thinkphp%');
'DB_LIKE_FIELDS'=>'title|content'
$map['title'] = 'thinkphp';
支援陣列方式,例如
$map['a'] =array('like',array('%thinkphp%','%tp'),'OR'); $map['b'] =array('notlike',array('%thinkphp%','%tp'),'AND');
產生的查詢條件是:
(a like '%thinkphp%' OR a like '%tp') AND (b not like '%thinkphp%' AND b not like '%tp')
[NOT] BETWEEN :同sql的[not] between,查詢條件支援字串或數組,例如:
$map['id'] = array('between','1,8');
和下面的等效:
$map['id'] = array('between',array('1','8'));
查詢條件變成id BETWEEN 1 AND 8
###[NOT] IN: 同sql的[not] in ,查詢條件支援字串或數組,例如:#########$map['id'] = array('not in','1,5,8');
$map['id'] = array('not in',array('1','5','8'));
$map['id'] = array('in','1,3,8');
可以改成:
$map['id'] = array('exp',' IN (1,3,8) ');
exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。
查询表达式不仅可用于查询条件,也可以用于数据更新,例如:
$User = M("User"); // 实例化User对象 // 要修改的数据对象属性赋值 $data['name'] = 'ThinkPHP'; $data['score'] = array('exp','score+1');// 用户的积分加1 $User->where('id=5')->save($data); // 根据条件保存修改的数据
快捷查询
where方法支持快捷查询方式,可以进一步简化查询条件的写法,例如:
一、实现不同字段相同的查询条件
$User = M("User"); // 实例化User对象 $map['name|title'] = 'thinkphp'; // 把查询条件传入查询方法 $User->where($map)->select();
查询条件就变成 name= 'thinkphp' OR title = 'thinkphp'
二、实现不同字段不同的查询条件
$User = M("User"); // 实例化User对象 $map['status&title'] =array('1','thinkphp','_multi'=>true); // 把查询条件传入查询方法 $User->where($map)->select();
'_multi'=>true必须加在数组的最后,表示当前是多条件匹配,这样查询条件就变成 status= 1 AND title = 'thinkphp' ,查询字段支持更多的,例如:
$map['status&score&title'] =array('1',array('gt','0'),'thinkphp','_multi'=>true);
查询条件就变成 status= 1 AND score >0 AND title = 'thinkphp'
注意:快捷查询方式中“|”和“&”不能同时使用。
区间查询
where方法支持对某个字段的区间查询,例如:
$map['id'] = array(array('gt',1),array('lt',10)) ;
得到的查询条件是: (`id` > 1) AND (`id` < 10)
$map['id'] = array(array('gt',3),array('lt',10), 'or') ;
得到的查询条件是: (`id` > 3) OR (`id` < 10)
$map['id'] = array(array('neq',6),array('gt',3),'and');
得到的查询条件是:(`id` != 6) AND (`id` > 3)
最后一个可以是AND、 OR或者 XOR运算符,如果不写,默认是AND运算。
区间查询的条件可以支持普通查询的所有表达式,也就是说类似LIKE、GT和EXP这样的表达式都可以支持。另外区间查询还可以支持更多的条件,只要是针对一个字段的条件都可以写到一起,例如:
$map['name'] = array(array('like','%a%'), array('like','%b%'), array('like','%c%'), 'ThinkPHP','or');
最后的查询条件是:
(`name` LIKE '%a%') OR (`name` LIKE '%b%') OR (`name` LIKE '%c%') OR (`name` = 'ThinkPHP')
组合查询
组合查询用于复杂的查询条件,如果你需要在查询的时候同时偶尔使用字符串却又不希望丢失数组方式的灵活的话,可以考虑使用组合查询。
组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括字符串模式查询(_string)、复合查询(_complex)、请求字符串查询(_query),混合查询中的特殊查询每次查询只能定义一个,由于采用数组的索引方式,索引相同的特殊查询会被覆盖。
一、字符串模式查询(采用_string 作为查询条件)
数组条件还可以和字符串条件混合使用,例如:
$User = M("User"); // 实例化User对象 $map['id'] = array('neq',1); $map['name'] = 'ok'; $map['_string'] = 'status=1 AND score>10'; $User->where($map)->select();
最后得到的查询条件就成了:
( `id` != 1 ) AND ( `name` = 'ok' ) AND ( status=1 AND score>10 )
二、请求字符串查询方式
请求字符串查询是一种类似于URL传参的方式,可以支持简单的条件相等判断。
$map['id'] = array('gt','100'); $map['_query'] = 'status=1&score=100&_logic=or';
得到的查询条件是:`id`>100 AND (`status` = '1' OR `score` = '100')
三、复合查询
复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以可以完成比较复杂的查询条件组装。
例如:
$where['name'] = array('like', '%thinkphp%'); $where['title'] = array('like','%thinkphp%'); $where['_logic'] = 'or'; $map['_complex'] = $where; $map['id'] = array('gt',1);
查询条件是
( id > 1) AND ( ( name like '%thinkphp%') OR ( title like '%thinkphp%') )
复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。
很多查询方式可以相互转换,例如上面的查询条件可以改成:
$where['id'] = array('gt',1); $where['_string'] = ' (name like "%thinkphp%") OR ( title like "%thinkphp") ';
最后生成的SQL语句是一致的。
多次调用
3.1.3版本开始,where方法支持多次调用,但字符串条件只能出现一次,例如:
$map['a'] = array('gt',1); $where['b'] = 1; $Model->where($map)->where($where)->where('status=1')->select();
多次的数组条件表达式会最终合并,但字符串条件则只支持一次。
关于ThinkPHP中where()方法的使用,本文就介绍这么多,希望对您有所帮助,谢谢!
相关推荐:
以上是ThinkPHP中where()使用方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP通過$\_FILES變量處理文件上傳,確保安全性的方法包括:1.檢查上傳錯誤,2.驗證文件類型和大小,3.防止文件覆蓋,4.移動文件到永久存儲位置。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。
