thinkphp如何查詢數(shù)據(jù)庫?
成都創(chuàng)新互聯(lián)公司專注于鄒平網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供鄒平營銷型網(wǎng)站建設(shè),鄒平網(wǎng)站制作、鄒平網(wǎng)頁設(shè)計(jì)、鄒平網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造鄒平網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供鄒平網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
數(shù)據(jù)庫查詢
ThinkPHP內(nèi)置了非常靈活的查詢方法,可以快速的進(jìn)行數(shù)據(jù)查詢操作。
查詢條件可以用于CURD等任何操作,作為where方法的參數(shù)傳入即可。
ThinkPHP可以支持直接使用字符串作為查詢條件,但是大多數(shù)情況推薦使用索引數(shù)組或者對象來作為查詢條件,因?yàn)闀?huì)更加安全。
查詢方式
一、使用字符串作為查詢條件
這是最傳統(tǒng)的方式,但是安全性不高,例如:
1
2
$User = M("User"); // 實(shí)例化User對象
$User-where('type=1 AND status=1')-select();
最后生成的SQL語句是
1
SELECT * FROM think_user WHERE type=1 AND status=1
二、使用數(shù)組作為查詢條件
1
2
3
4
5
$User = M("User"); // 實(shí)例化User對象
$condition['name'] = 'thinkphp';
$condition['status'] = 1;
// 把查詢條件傳入查詢方法
$User-where($condition)-select();
最后生成的SQL語句是
1
SELECT * FROM think_user WHERE 'name'='thinkphp' AND status=1
如果進(jìn)行多字段查詢,那么字段之間的默認(rèn)邏輯關(guān)系是 邏輯與 AND,但是用下面的規(guī)則可以更改默認(rèn)的邏輯判斷,通過使用 _logic 定義查詢邏輯:
1
2
3
4
5
6
$User = M("User"); // 實(shí)例化User對象
$condition['name'] = 'thinkphp';
$condition['account'] = 'thinkphp';
$condition['_logic'] = 'OR'; //定義查詢邏輯
// 把查詢條件傳入查詢方法
$User-where($condition)-select();
最后生成的SQL語句是
1
SELECT * FROM think_user WHERE 'name'='thinkphp' OR `account`='thinkphp'
三、使用對象方式來查詢 (這里以stdClass內(nèi)置對象為例)
1
2
3
4
5
6
$User = M("User"); // 實(shí)例化User對象
// 定義查詢條件
$condition = new stdClass();
$condition-name = 'thinkphp';
$condition-status= 1;
$User-where($condition)-select();
最后生成的SQL語句和上面一樣
1
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
使用對象方式查詢和使用數(shù)組查詢的效果是相同的,并且是可以互換的,大多數(shù)情況下,我們建議采用數(shù)組方式更加高效,后面我們會(huì)以數(shù)組方式為例來講解具體的查詢語言用法。
表達(dá)式查詢
上面的查詢條件僅僅是一個(gè)簡單的相等判斷,可以使用查詢表達(dá)式支持更多的SQL查詢語法,并且可以用于數(shù)組或者對象方式的查詢(下面僅以數(shù)組方式為例說明),查詢表達(dá)式的使用格式:
1
$map['字段名'] = array('表達(dá)式','查詢條件');
表達(dá)式不分大小寫,支持的查詢表達(dá)式有下面幾種,分別表示的含義是:
1
2
3
4
$map['id']? = array('eq',100);? id = 100;
$map['id']? = array('egt',100);id = 100
$map['name'] = array('like','thinkphp%'); name like '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')
本文來自ThinkPHP框架技術(shù)文章欄目:
以上就是thinkphp如何查詢數(shù)據(jù)庫的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
前邊介紹了負(fù)載均衡,mysql同步,接下來介紹tp6分布式部署多個(gè)數(shù)據(jù)庫,實(shí)現(xiàn)讀寫分離。
tp6的分布式部署讀和寫仍然是一個(gè)系統(tǒng),這里我們分開操作,給用戶展示的就是從數(shù)據(jù)庫,后端添加文章就是主庫,然后同步到從庫。
1、配置數(shù)據(jù)庫鏈接參數(shù)
目標(biāo):實(shí)現(xiàn)隨機(jī)使用數(shù)據(jù)庫展示信息,只是讀操作。
測試:前臺可以讀取表中內(nèi)容(存放的不一致),查看是否是隨機(jī)顯示的。
打開.env文件進(jìn)行編輯
說明:
2、編輯database.php
找到deploy設(shè)置為1分布式部署,下邊不要改,都是讀,寫入的也就是后端的我們單獨(dú)建站連接主庫。
配置完成,tp6使用的是mt_rand取隨機(jī)數(shù)判斷使用哪個(gè)數(shù)據(jù)庫。
3、數(shù)據(jù)庫交互寫操作
比如瀏覽量沒必要每次都去更新數(shù)據(jù)庫,可以先使用redis緩存,存夠1000的整數(shù)倍,再去更新數(shù)據(jù)庫。
4、后臺獨(dú)立,也就是寫
可以前后端分離,單獨(dú)做一個(gè)網(wǎng)站(沒有前端)使用ip訪問或者獨(dú)立的域名連接后臺。
5、上傳附件(jquery ajax跨域上傳)
使用了nginx負(fù)載均衡,肯定是多個(gè)一樣的網(wǎng)站,如果圖片存放到一個(gè)站,別的就不能訪問了,可以單獨(dú)設(shè)置一個(gè)附件(壓縮包,圖片等)服務(wù)器,可以使用二級域名連接,這就要求我們上傳附件的時(shí)候,是上傳到附件服務(wù)器。
jqueryURL
API控制器apdpic方法
說明:
也可以先傳到后臺服務(wù)器然后使用(php)ftp上傳,或者是通過curl上傳到附件服務(wù)器,感覺那樣畢竟麻煩,直接設(shè)置跨域會(huì)比較簡單。
也測試了使用jsonp跨域,但是不能上傳附件。
6、thinkphp6實(shí)現(xiàn)讀寫分離(在一個(gè)站點(diǎn))
我個(gè)人是不喜歡這樣的,負(fù)載均衡應(yīng)該是均衡地讀,也就是前臺單獨(dú)一個(gè)站點(diǎn),后端的寫是另一個(gè)獨(dú)立的站點(diǎn),看個(gè)人喜好吧。
獨(dú)立后臺的優(yōu)點(diǎn):可以提升安全性,因?yàn)槲覀兊暮笈_網(wǎng)址是不公開的,避免用戶猜測一些后臺的信息。
.env配置按照1所述編輯,默認(rèn)第一個(gè)是主庫。
database.php
愿大家在新的一年心想事成,萬事如意?。?!
ThinkPHP\Common文件夾中的convention.php中是tp的核心配置文件,不能亂動(dòng),如果要想更改里面的配置,在Conf 文件夾里面的config.php可以配置,可以這樣寫
?php
return array(
'DB_TYPE' = 'mysql',// 數(shù)據(jù)庫類型
'DB_HOST' = '127.0.0.1',// 數(shù)據(jù)庫服務(wù)器地址
'DB_NAME' = 'thinkphp',// 數(shù)據(jù)庫名稱
'DB_USER' = 'root',// 數(shù)據(jù)庫用戶名
'DB_PWD' = '123',// 數(shù)據(jù)庫密碼
'DB_PREFIX' = 'tp_',// 數(shù)據(jù)表前綴
'DB_CHARSET' = 'utf8',// 網(wǎng)站編碼
'DB_PORT' = '3306',// 數(shù)據(jù)庫端口
'APP_DEBUG' = false,// 開啟調(diào)試模式
);
008. 數(shù)據(jù)庫的數(shù)據(jù)查詢
本節(jié)課我們來了解一下數(shù)據(jù)庫的數(shù)據(jù)查詢方式,單數(shù)據(jù)、數(shù)據(jù)集和其它查詢。
一.單數(shù)據(jù)查詢
1. Db::table()中table必須指定完整數(shù)據(jù)表(包括前綴);
2. 如果希望只查詢一條數(shù)據(jù),可以使用find()方法,需指定where條件;
Db::table('tp_user')-where('id', 27)-find()
3. Db::getLastSql()方法,可以得到最近一條SQL查詢的原生語句;
SELECT * FROM `tp_user` LIMIT 1
4. 沒有查詢到任何值,則返回null;
5. 使用findOrFail()方法同樣可以查詢一條數(shù)據(jù),在沒有數(shù)據(jù)時(shí)拋出一個(gè)異常;
Db::table('tp_user')-where('id', 1)-findOrFail()
6. 使用findOrEmpty()方法也可以查詢一條數(shù)據(jù),但在沒有數(shù)據(jù)時(shí)返回一個(gè)空數(shù)組;
7. Db::table('tp_user')-where('id', 1)-findOrEmpty();
二.數(shù)據(jù)集查詢
1. 想要獲取多列數(shù)據(jù),可以使用select()方法;
Db::table('tp_user')-select(); SELECT * FROM `tp_user`
2. 多列數(shù)據(jù)在查詢不到任何數(shù)據(jù)時(shí)返回空數(shù)組,使用selectOrFail()拋出異常; Db::table('tp_user')-where('id', 1)-selectOrFail();
3. 在select()方法后再使用toArray()方法,可以將數(shù)據(jù)集對象轉(zhuǎn)化為數(shù)組;
4. 當(dāng)在數(shù)據(jù)庫配置文件中設(shè)置了前綴,那么我們可以使用name()方法忽略前綴; Db::name('user')-select();
三.其它查詢
1. 通過value()方法,可以查詢指定字段的值(單個(gè)),沒有數(shù)據(jù)返回null;
Db::name('user')-where('id', 27)-value('username');
$user = Db::table('tp_user')-select()-toArray(); dump($user);
2. 通過colunm()方法,可以查詢指定列的值(多個(gè)),沒有數(shù)據(jù)返回空數(shù)組; Db::name('user')-column('username');
3. 可以指定id作為列值的索引;
4. 如果處理的數(shù)據(jù)量巨大,成百上千那種,一次性讀取有可能會(huì)導(dǎo)致內(nèi)存開銷過大;
5. 為了避免內(nèi)存處理太多數(shù)據(jù)出錯(cuò),可以使用chunk()方法分批處理數(shù)據(jù);
6. 比如,每次只處理100條,處理完畢后,再讀取100條繼續(xù)處理;
7. 可以利用游標(biāo)查詢功能,可以大幅度減少海量數(shù)據(jù)的內(nèi)存開銷,它利用了PHP生成器特性。每次查詢只讀一行,然后再讀取時(shí),自動(dòng)定位到下一行繼續(xù)讀取;
Db::name('user')-column('username', 'id');
Db::table('tp_user')-chunk(3, function($users) { foreach ($users as $user) {
dump($user);
}
echo 1; });
$cursor = Db::table('tp_user')-cursor(); foreach($cursor as $user){
dump($user);
}
thinkphp連接數(shù)據(jù)庫的方法:
ThinkPHP內(nèi)置了抽象數(shù)據(jù)庫訪問層,把不同的數(shù)據(jù)庫操作封裝起來,只需要使用公共的Db類進(jìn)行操作,而無需針對不同的數(shù)據(jù)庫寫不同的代碼和底層實(shí)現(xiàn),Db類會(huì)自動(dòng)調(diào)用相應(yīng)的數(shù)據(jù)庫驅(qū)動(dòng)來處理。目前的數(shù)據(jù)庫包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括對PDO的支持,如果應(yīng)用需要使用數(shù)據(jù)庫,必須配置數(shù)據(jù)庫連接信息,數(shù)據(jù)庫的配置文件有多種定義方式。
常用的配置方式是在項(xiàng)目配置文件中添加下面的參數(shù):
?php
//項(xiàng)目配置文件
return array(
//數(shù)據(jù)庫配置信息
'DB_TYPE' = 'mysql', // 數(shù)據(jù)庫類型
'DB_HOST' = 'localhost', // 服務(wù)器地址
'DB_NAME' = 'thinkphp', // 數(shù)據(jù)庫名
'DB_USER' = 'root', // 用戶名
'DB_PWD' = '', // 密碼
'DB_PORT' = 3306, // 端口
'DB_PREFIX' = 'think_', // 數(shù)據(jù)庫表前綴
//其他項(xiàng)目配置參數(shù)
// ...
);
需要注意的是,ThinkPHP的數(shù)據(jù)庫連接的惰性的,所以并不是在實(shí)例化的時(shí)候就連接數(shù)據(jù)庫,而是在有實(shí)際的數(shù)據(jù)操作的時(shí)候才會(huì)去連接數(shù)據(jù)庫(額外的情況是,在系統(tǒng)第一次實(shí)例化模型的時(shí)候,會(huì)自動(dòng)連接數(shù)據(jù)庫獲取相關(guān)模型類對應(yīng)的數(shù)據(jù)表的字段信息)。
thinkphp model 必須對應(yīng)數(shù)據(jù)庫表名是設(shè)置錯(cuò)誤造成的,解決方法為:
1、打開SQL Developer。
2、右擊要操作的數(shù)據(jù)庫,然后選擇【連接】。
3、在彈出對話框中,輸入口令,然后點(diǎn)擊【確定】。
4、展開【表】目錄,右擊要操作的表,然后選擇【編輯】。
5、此時(shí)進(jìn)入表編輯界面。
6、輸入新的表名,然后點(diǎn)擊【確定】。
7、此時(shí)數(shù)據(jù)庫表名就修改完成了。
網(wǎng)站欄目:thinkPHP數(shù)據(jù)庫 thinkphp數(shù)據(jù)庫連接池
網(wǎng)站地址:http://muchs.cn/article16/hgipgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、網(wǎng)站排名、服務(wù)器托管、建站公司、Google、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)