日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

1.php查询数据,查询数据 - ThinkPHP 5.1 完全开发手册

發(fā)布時間:2024/7/19 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.php查询数据,查询数据 - ThinkPHP 5.1 完全开发手册 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

基本查詢

查詢單個數(shù)據(jù)使用find方法:

// table方法必須指定完整的數(shù)據(jù)表名

Db::table('think_user')->where('id',1)->find();

最終生成的SQL語句可能是:

SELECT * FROM `think_user` WHERE `id` = 1 LIMIT 1

find 方法查詢結(jié)果不存在,返回 null,否則返回結(jié)果數(shù)組

如果希望在沒有找到數(shù)據(jù)后拋出異常可以使用

// table方法必須指定完整的數(shù)據(jù)表名

Db::table('think_user')->where('id',1)->findOrFail();

如果沒有查找到數(shù)據(jù),則會拋出一個think\db\exception\DataNotFoundException異常。

查詢多個數(shù)據(jù)(數(shù)據(jù)集)使用select方法:

Db::table('think_user')->where('status',1)->select();

最終生成的SQL語句可能是:

SELECT * FROM `think_user` WHERE `status` = 1

select 方法查詢結(jié)果是一個二維數(shù)組,如果結(jié)果不存在,返回空數(shù)組

如果希望在沒有查找到數(shù)據(jù)后拋出異常可以使用

Db::table('think_user')->where('status',1)->selectOrFail();

如果沒有查找到數(shù)據(jù),同樣也會拋出一個think\db\exception\DataNotFoundException異常。

如果設(shè)置了數(shù)據(jù)表前綴參數(shù)的話,可以使用

Db::name('user')->where('id',1)->find();

Db::name('user')->where('status',1)->select();

如果你的數(shù)據(jù)表沒有設(shè)置表前綴的話,那么name和table方法效果一致。

在find和select方法之前可以使用所有的鏈?zhǔn)讲僮?參考鏈?zhǔn)讲僮髡鹿?jié))方法。

默認(rèn)情況下,find和select方法返回的都是數(shù)組,區(qū)別在于后者是二維數(shù)組。

助手函數(shù)

系統(tǒng)提供了一個db助手函數(shù),可以更方便的查詢:

db('user')->where('id',1)->find();

db('user')->where('status',1)->select();

db方法的第一個參數(shù)的作用和name方法一樣,如果需要使用不同的數(shù)據(jù)庫連接,可以使用:

db('user','db_config1')->where('id', 1)->find();

值和列查詢

查詢某個字段的值可以用

// 返回某個字段的值

Db::table('think_user')->where('id',1)->value('name');

value 方法查詢結(jié)果不存在,返回 null

查詢某一列的值可以用

// 返回數(shù)組

Db::table('think_user')->where('status',1)->column('name');

// 指定id字段的值作為索引

Db::table('think_user')->where('status',1)->column('name','id');

如果要返回完整數(shù)據(jù),并且添加一個索引值的話,可以使用

// 指定id字段的值作為索引 返回所有數(shù)據(jù)

Db::table('think_user')->where('status',1)->column('*','id');

column 方法查詢結(jié)果不存在,返回空數(shù)組

數(shù)據(jù)分批處理

如果你需要處理成千上百條數(shù)據(jù)庫記錄,可以考慮使用chunk方法,該方法一次獲取結(jié)果集的一小塊,然后填充每一小塊數(shù)據(jù)到要處理的閉包,該方法在編寫處理大量數(shù)據(jù)庫記錄的時候非常有用。

比如,我們可以全部用戶表數(shù)據(jù)進(jìn)行分批處理,每次處理 100 個用戶記錄:

Db::table('think_user')->chunk(100, function($users) {

foreach ($users as $user) {

//

}

});

// 或者交給回調(diào)方法myUserIterator處理

Db::table('think_user')->chunk(100, 'myUserIterator');

你可以通過從閉包函數(shù)中返回false來中止對后續(xù)數(shù)據(jù)集的處理:

Db::table('think_user')->chunk(100, function($users) {

foreach ($users as $user) {

// 處理結(jié)果集...

if($user->status==0){

return false;

}

}

});

也支持在chunk方法之前調(diào)用其它的查詢方法,例如:

Db::table('think_user')

->where('score','>',80)

->chunk(100, function($users) {

foreach ($users as $user) {

//

}

});

chunk方法的處理默認(rèn)是根據(jù)主鍵查詢,支持指定字段,例如:

Db::table('think_user')->chunk(100, function($users) {

// 處理結(jié)果集...

return false;

},'create_time');

并且支持指定處理數(shù)據(jù)的順序。

Db::table('think_user')->chunk(100, function($users) {

// 處理結(jié)果集...

return false;

},'create_time', 'desc');

chunk方法一般用于命令行操作批處理數(shù)據(jù)庫的數(shù)據(jù),不適合WEB訪問處理大量數(shù)據(jù),很容易導(dǎo)致超時。

大批量數(shù)據(jù)處理

如果你需要處理大量的數(shù)據(jù),可以使用新版提供的游標(biāo)查詢功能,該查詢方式利用了PHP的生成器特性,可以大幅減少大量數(shù)據(jù)查詢的內(nèi)存占用問題。

$cursor = Db::table('user')->where('status', 1)->cursor();

foreach($cursor as $user){

echo $user['name'];

}

cursor方法返回的是一個生成器對象,user變量是數(shù)據(jù)表的一條數(shù)據(jù)(數(shù)組)。

JSON類型數(shù)據(jù)查詢(mysql)

// 查詢JSON類型字段 (info字段為json類型)

Db::table('think_user')

->where('info->email','thinkphp@qq.com')

->find();

總結(jié)

以上是生活随笔為你收集整理的1.php查询数据,查询数据 - ThinkPHP 5.1 完全开发手册的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。