這篇文章給大家分享的是有關(guān)ThinkPHP數(shù)據(jù)庫(kù)操作之存儲(chǔ)過(guò)程、數(shù)據(jù)集、分布式數(shù)據(jù)庫(kù)的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

存儲(chǔ)過(guò)程
5.0支持存儲(chǔ)過(guò)程,如果我們定義了一個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程 sp_query ,可以使用下面的方式調(diào)用:
$result = Db::query('call sp_query(8)');返回的是一個(gè)二維數(shù)組,也可以使用參數(shù)綁定,例如:
$result = Db::query('call sp_query(?)',[8]);
// 或者命名綁定$result = Db::query('call sp_query(:id)',['id'=>8]);數(shù)據(jù)集
數(shù)據(jù)庫(kù)的查詢(xún)結(jié)果也就是數(shù)據(jù)集,默認(rèn)的配置下,數(shù)據(jù)集的類(lèi)型是一個(gè)二維數(shù)組,我們可以配置成數(shù)據(jù)集類(lèi),就可以支持對(duì)數(shù)據(jù)集更多的對(duì)象化操作,需要使用數(shù)據(jù)集類(lèi)功能,可以配置數(shù)據(jù)庫(kù)的resultset_type 參數(shù)如下:
return [ // 數(shù)據(jù)庫(kù)類(lèi)型 'type' => 'mysql', // 數(shù)據(jù)庫(kù)連接DSN配置 'dsn' => '', // 服務(wù)器地址 'hostname' => '127.0.0.1', // 數(shù)據(jù)庫(kù)名 'database' => 'thinkphp', // 數(shù)據(jù)庫(kù)用戶(hù)名 'username' => 'root', // 數(shù)據(jù)庫(kù)密碼 'password' => '', // 數(shù)據(jù)庫(kù)連接端口 'hostport' => '', // 數(shù)據(jù)庫(kù)連接參數(shù) 'params' => [], // 數(shù)據(jù)庫(kù)編碼默認(rèn)采用utf8 'charset' => 'utf8', // 數(shù)據(jù)庫(kù)表前綴 'prefix' => 'think_', // 數(shù)據(jù)集返回類(lèi)型 'resultset_type' => 'collection',];
返回的數(shù)據(jù)集對(duì)象是 think\Collection ,提供了和數(shù)組無(wú)差別用法,并且另外封裝了一些額外的方法。可以直接使用數(shù)組的方式操作數(shù)據(jù)集對(duì)象,例如:
// 獲取數(shù)據(jù)集
$users = Db::name('user')->select();
// 直接操作第一個(gè)元素
$item = $users[0];
// 獲取數(shù)據(jù)集記錄數(shù)
$count = count($users);
// 遍歷數(shù)據(jù)集
foreach($users as $user){    echo $user['name'];    echo $user['id'];
}需要注意的是,如果要判斷數(shù)據(jù)集是否為空,不能直接使用 empty 判斷,而必須使用數(shù)據(jù)集對(duì)象的isEmpty 方法判斷,例如:
$users = Db::name('user')->select();if($users->isEmpty()){    echo '數(shù)據(jù)集為空';
}Collection 類(lèi)包含了下列主要方法:

如果只是個(gè)別數(shù)據(jù)的查詢(xún)需要返回?cái)?shù)據(jù)集對(duì)象,則可以使用
Db::name('user')    ->fetchClass('\think\Collection')    ->select();分布式數(shù)據(jù)庫(kù)
ThinkPHP內(nèi)置了分布式數(shù)據(jù)庫(kù)的支持,包括主從式數(shù)據(jù)庫(kù)的讀寫(xiě)分離,但是分布式數(shù)據(jù)庫(kù)必須是相同的數(shù)據(jù)庫(kù)類(lèi)型。
配置 database.deploy 為1 可以采用分布式數(shù)據(jù)庫(kù)支持。如果采用分布式數(shù)據(jù)庫(kù),定義數(shù)據(jù)庫(kù)配置信息的方式如下:
//分布式數(shù)據(jù)庫(kù)配置定義 return [ // 啟用分布式數(shù)據(jù)庫(kù) 'deploy' => 1, // 數(shù)據(jù)庫(kù)類(lèi)型 'type' => 'mysql', // 服務(wù)器地址 'hostname' => '192.168.1.1,192.168.1.2', // 數(shù)據(jù)庫(kù)名 'database' => 'demo', // 數(shù)據(jù)庫(kù)用戶(hù)名 'username' => 'root', // 數(shù)據(jù)庫(kù)密碼 'password' => '', // 數(shù)據(jù)庫(kù)連接端口 'hostport' => '',]
連接的數(shù)據(jù)庫(kù)個(gè)數(shù)取決于 hostname 定義的數(shù)量,所以即使是兩個(gè)相同的IP也需要重復(fù)定義,但是其他的參數(shù)如果存在相同的可以不用重復(fù)定義,例如:
'hostport'=>'3306,3306'
和
'hostport'=>'3306'
等效。
'username'=>'user1', 'password'=>'pwd1',
和
'username'=>'user1,user1', 'password'=>'pwd1,pwd1',
等效。
還可以設(shè)置分布式數(shù)據(jù)庫(kù)的讀寫(xiě)是否分離,默認(rèn)的情況下讀寫(xiě)不分離,也就是每臺(tái)服務(wù)器都可以進(jìn)行讀寫(xiě)操作,對(duì)于主從式數(shù)據(jù)庫(kù)而言,需要設(shè)置讀寫(xiě)分離,通過(guò)下面的設(shè)置就可以:
'rw_separate' => true,
在讀寫(xiě)分離的情況下,默認(rèn)第一個(gè)數(shù)據(jù)庫(kù)配置是主服務(wù)器的配置信息,負(fù)責(zé)寫(xiě)入數(shù)據(jù),如果設(shè)置了 master_num參數(shù),則可以支持多個(gè)主服務(wù)器寫(xiě)入。其它的都是從數(shù)據(jù)庫(kù)的配置信息,負(fù)責(zé)讀取數(shù)據(jù),數(shù)量不限制。每次連接從服務(wù)器并且進(jìn)行讀取操作的時(shí)候,系統(tǒng)會(huì)隨機(jī)進(jìn)行在從服務(wù)器中選擇。
還可以設(shè)置 slave_no 指定某個(gè)服務(wù)器進(jìn)行讀操作。
如果從數(shù)據(jù)庫(kù)連接錯(cuò)誤,會(huì)自動(dòng)切換到主數(shù)據(jù)庫(kù)連接。
調(diào)用模型的CURD操作的話(huà),系統(tǒng)會(huì)自動(dòng)判斷當(dāng)前執(zhí)行的方法的讀操作還是寫(xiě)操作,如果你用的是原生SQL,那么需要注意系統(tǒng)的默認(rèn)規(guī)則:寫(xiě)操作必須用模型的execute方法,讀操作必須用模型的query方法,否則會(huì)發(fā)生主從讀寫(xiě)錯(cuò)亂的情況。
注意:主從數(shù)據(jù)庫(kù)的數(shù)據(jù)同步工作不在框架實(shí)現(xiàn),需要數(shù)據(jù)庫(kù)考慮自身的同步或者復(fù)制機(jī)制。
感謝各位的閱讀!關(guān)于“ThinkPHP數(shù)據(jù)庫(kù)操作之存儲(chǔ)過(guò)程、數(shù)據(jù)集、分布式數(shù)據(jù)庫(kù)的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
                文章題目:ThinkPHP數(shù)據(jù)庫(kù)操作之存儲(chǔ)過(guò)程、數(shù)據(jù)集、分布式數(shù)據(jù)庫(kù)的示例分析-創(chuàng)新互聯(lián)
                
                網(wǎng)頁(yè)網(wǎng)址:http://www.yijiale78.com/article20/pssco.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站策劃、域名注冊(cè)、外貿(mào)建站、ChatGPT、全網(wǎng)營(yíng)銷(xiāo)推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容