最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php封裝pdo實(shí)例以及pdo長連接的優(yōu)缺點(diǎn)總結(jié)

 更新時(shí)間:2021年12月21日 08:35:44   作者:長期閑置  
在本篇文章里小編給大家整理的是一篇關(guān)于php封裝pdo實(shí)例以及pdo長連接的優(yōu)缺點(diǎn)總結(jié)內(nèi)容,對(duì)此有興趣的朋友們可以跟著學(xué)習(xí)下。

一、前言

最近需要寫腳本來實(shí)現(xiàn)崩潰日志的入庫,不出所料又是脫離于框架的,那么行吧,咱們只能自己封裝數(shù)據(jù)庫相關(guān)操作了。博主這里選擇了封裝pdo操作數(shù)據(jù)庫相關(guān)。

二、為什么選擇pdo

眾所周知的,php在早期的時(shí)候是帶有mysql擴(kuò)展的,但是后來由于過于古老缺失了mysql的新特性,因此主鍵沒落。

從php5開始,更建議大家使用mysqli擴(kuò)展,這個(gè)是mysql擴(kuò)展的增強(qiáng)版,是一個(gè)面向?qū)ο蟮腗ySQL接口,更容易使用。缺點(diǎn)是只能操作mysql,不夠強(qiáng)大。

還有就是pdo擴(kuò)展了,這個(gè)是最豐富的的一個(gè)擴(kuò)展,支持多種數(shù)據(jù)庫,重要的是,在安全上是比其他兩種擴(kuò)展都要強(qiáng)的,通過使用prepared預(yù)處理更是有效的防止sql注入。因此,博主這里選擇了封裝pdo相關(guān)的操作。

三、pdo的長連接

1、什么是pdo的長連接

長連接顧名思義就是一直保持連接,相對(duì)于平時(shí)的短連接,每次請(qǐng)求都會(huì)重新創(chuàng)建鏈接來說,長連接可以有效的減少創(chuàng)建的過程,可以更好的節(jié)省性能。

在操作上是在連接數(shù)據(jù)庫的時(shí)候,多加一個(gè)參數(shù):

$pdo = new PDO($dsn, $username, $passwd, [PDO::ATTR_PERSISTENT => true]);

后面的PDO::ATTR_PERSISTENT => true 就是開啟長連接的方法。

2、長連接對(duì)nginx無效嗎

博主在搜索長連接相關(guān)知識(shí)的時(shí)候,看到一篇文章,結(jié)論是長連接僅適用于apache,不適用于nginx,這是真的嗎?

參考文章:http://www.fzitv.net/article/133709.htm

大致結(jié)論是:長連接更多的是針對(duì)于apache的,因?yàn)閍pache維護(hù)一個(gè)進(jìn)程池,開啟了apache mpm功能之后,apache會(huì)默認(rèn)維持一個(gè)進(jìn)程池,mysql長連接之后的連接,并沒有作為socet連接關(guān)閉,而是作為一個(gè)不釋放的東西,放進(jìn)了進(jìn)程池/線程池里面去。

而對(duì)于nginx來說,長連接是無效的,腳本執(zhí)行結(jié)束則釋放資源?

3、php-fpm下的長連接測試

這里前輩已經(jīng)測試過了,咱們給出前輩的地址,大家有興趣的可以看看

結(jié)論:
事實(shí)證明php-fpm是可以實(shí)現(xiàn)長連接的,只是如果該進(jìn)程空閑的話,會(huì)造成資源浪費(fèi)。

php-fpm的配置文件可以考慮設(shè)置pm.max_requests = 1000,代表每一個(gè)子進(jìn)程的最大請(qǐng)求服務(wù)數(shù)量,如果超過了這個(gè)值,該子進(jìn)程會(huì)被自動(dòng)重啟。

比如max_requests這個(gè)參數(shù),如果設(shè)置很大的話,那這個(gè)子進(jìn)程要運(yùn)行很多次才會(huì)重啟,假如這個(gè)請(qǐng)求發(fā)生了錯(cuò)誤或者內(nèi)存泄漏,那么這個(gè)值設(shè)置很大是不合適的。但如果請(qǐng)求沒有問題,這個(gè)值設(shè)置小的話就會(huì)頻繁的重啟,這樣也會(huì)碰到不少502的問題,所以要仁者見仁,智者見智的設(shè)置了,這里初始化設(shè)置1000,如果測試沒有內(nèi)存泄漏等問題,可以再大一些。

4、長連接對(duì)事務(wù)的影響

參考博文地址:https://www.zhihu.com/question/62603122

總結(jié): 如果業(yè)務(wù)并發(fā)比較大且?guī)в惺聞?wù),不建議使用長連接的方式。

5、總結(jié)

博主在不斷的搜索中,發(fā)現(xiàn)長連接要發(fā)揮出最佳性能始終是避不開連接池這點(diǎn)的,而php恰恰又不能很好的實(shí)現(xiàn)連接池,這點(diǎn)確實(shí)是有點(diǎn)小遺憾。

整體來說在php中是暫時(shí)無法配置和mysql的完美連接池的,在業(yè)務(wù)比較復(fù)雜的地方,還是謹(jǐn)慎試用長連接,每個(gè)連接都是1個(gè)線程,會(huì)造成大量的資源浪費(fèi)。

如果是某些業(yè)務(wù)需要持續(xù)的數(shù)據(jù)庫操作,比如提交日志接口等,那么是可以考慮打開長連接的,記得設(shè)置max_requests來定量關(guān)閉php-fpm連接,fpm關(guān)閉之后也會(huì)自動(dòng)釋放mysql的連接。

還有pm.max_spare_servers設(shè)置服務(wù)器空閑時(shí)最大php-fpm進(jìn)程數(shù)量。

例如: pm.max_spare_servers = 25 如果空閑時(shí),會(huì)檢查進(jìn)程數(shù),多于25個(gè)了,就會(huì)關(guān)閉幾個(gè),達(dá)到25個(gè)的狀態(tài)。

擅長swoole的同學(xué),可以參考這篇文章:
基于swoole擴(kuò)展實(shí)現(xiàn)真正的PHP數(shù)據(jù)庫連接池

四、pdo部分demo的封裝

首先這部分博主是參考了一個(gè)網(wǎng)友的封裝,github地址如下:

https://github.com/nadirvishun/php-pdo-class

這個(gè)網(wǎng)友基本的增刪改查都封裝好了,而且都有參數(shù)預(yù)處理,安全性還是可以的。不過既然作為一個(gè)基準(zhǔn)的類,還是缺少一些東西。

1、斷線重連機(jī)制

例如重連函數(shù):

/**
 * @params:重連函數(shù),上限3次
 * @date:2020/3/18
 * @time:17:03
 */
public function customConnect()
{
    try {
        $this->pdo = new PDO($this->config['dsn'], $this->config['username'], $this->config['password'], $this->config['params']);
        $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //需要將錯(cuò)誤處理模式變成異常模式
        return true;
    } catch (Exception $e) {
        if (stripos($e->getMessage(), 'MySQL server has gone away') !== false || stripos($e->getMessage(),' bytes failed with errno=10053') !==false) {
            $this->close();
            $this->tryNums++;
            if ($this->tryNums > 3) {
                return false;
            }
            self::customConnect();
        } else {
            $this->throw_exception($e->getMessage());
            return false;
        }
    }
}

2、轉(zhuǎn)化php warnings為try…catch可捕獲的錯(cuò)誤

這步原因是長連接會(huì)頻繁的造成mysql gone away錯(cuò)誤,而這個(gè)錯(cuò)誤是php 的warnings級(jí)別錯(cuò)誤,try..catch根本就捕獲不到,所以博主這里自定義錯(cuò)誤處理函數(shù)來處理。

這部分是轉(zhuǎn)化php的warnings錯(cuò)誤為try..catch可以捕獲的error錯(cuò)誤,關(guān)于php的報(bào)錯(cuò)機(jī)制以及錯(cuò)誤處理這塊,咱們下篇再討論。

//自定義warnings處理函數(shù)set_error_handler('customException');//拿到warnngs錯(cuò)誤之后,轉(zhuǎn)化為error錯(cuò)誤拋出,這樣就可以被try..catch捕獲function customException( $error_no, $error_msg, $error_file, $error_line){
    throw new \Exception($error_msg,0,null);
    //throw new \Exception($error_msg);}

3、析構(gòu)方法回收資源

/**
 * destruct 關(guān)閉數(shù)據(jù)庫連接
 */
public function destruct()
{
    $this->pdo = null;
}

4、query的時(shí)候ping一下

public function query($sql = null, $param = null)
  {
      //檢測連接是否活躍
      $this->pdo_ping();
      //判斷之前是否有結(jié)果集
      if (!empty($this->PDOStatement)) {
          $this->free();
      }
      xxxxxxxxxx        }

5、下載地址

這四步完善之后,這個(gè)pdo的類還是可以用的,大家需要的話可以去百度云上下載。

鏈接: https://pan.baidu.com/s/1Siz_bKlhEIVNV99Y0zTzqw 提取碼: ebqx

到此這篇關(guān)于php封裝pdo實(shí)例以及pdo長連接的優(yōu)缺點(diǎn)總結(jié)的文章就介紹到這了,更多相關(guān)php封裝pdo實(shí)例及pdo長連接優(yōu)缺點(diǎn)分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PHP排序二叉樹基本功能實(shí)現(xiàn)方法示例

    PHP排序二叉樹基本功能實(shí)現(xiàn)方法示例

    這篇文章主要介紹了PHP排序二叉樹基本功能實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了PHP排序二叉樹的定義、遍歷、節(jié)點(diǎn)插入、查找等相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-05-05
  • php使用timthumb生成縮略圖的方法

    php使用timthumb生成縮略圖的方法

    這篇文章主要介紹了php使用timthumb生成縮略圖的方法,實(shí)例分析了PHP調(diào)用timthumb生成縮略圖的操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-01-01
  • 如何使用FireFox插件FirePHP調(diào)試PHP

    如何使用FireFox插件FirePHP調(diào)試PHP

    使用這個(gè)工具,首先你需要安裝FirePHP插件。這個(gè)插件需要你已經(jīng)安裝FireBug。裝好FirePHP之后,重新打開Firebug面板時(shí)候,你會(huì)看到新加了一個(gè)藍(lán)色的臭蟲圖標(biāo)。點(diǎn)擊這個(gè)圖標(biāo)會(huì)出現(xiàn)一個(gè)開啟或者關(guān)閉FirePHP的菜單
    2013-07-07
  • PHP中通過語義URL防止網(wǎng)站被攻擊的方法分享

    PHP中通過語義URL防止網(wǎng)站被攻擊的方法分享

    好奇心是很多攻擊者的主要?jiǎng)訖C(jī),語義URL 攻擊就是一個(gè)很好的例子。此類攻擊主要包括對(duì)URL 進(jìn)行編輯以期發(fā)現(xiàn)一些有趣的事情。
    2011-09-09
  • PHP 多維數(shù)組排序?qū)崿F(xiàn)代碼

    PHP 多維數(shù)組排序?qū)崿F(xiàn)代碼

    PHP 多維數(shù)組排序?qū)崿F(xiàn)代碼,需要的朋友可以參考下。
    2009-08-08
  • PHP函數(shù)之error_reporting(E_ALL ^ E_NOTICE)詳細(xì)說明

    PHP函數(shù)之error_reporting(E_ALL ^ E_NOTICE)詳細(xì)說明

    在看帝國cms的connect.php是發(fā)現(xiàn)第一句是error_reporting(E_ALL ^ E_NOTICE);以前也沒注意過這個(gè)語句,知道是設(shè)置錯(cuò)誤提示的,但不清楚具體怎樣設(shè)置使用。下面從網(wǎng)上摘抄了些東西,總結(jié)了一下。
    2011-07-07
  • php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之間的區(qū)別

    php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之間的區(qū)別

    php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之間的區(qū)別
    2009-09-09
  • PHP使用file_get_contents發(fā)送http請(qǐng)求功能簡單示例

    PHP使用file_get_contents發(fā)送http請(qǐng)求功能簡單示例

    這篇文章主要介紹了PHP使用file_get_contents發(fā)送http請(qǐng)求功能,結(jié)合實(shí)例形式分析了file_get_contents結(jié)合stream_context_create實(shí)現(xiàn)的發(fā)送post請(qǐng)求數(shù)據(jù)相關(guān)原理與操作技巧,需要的朋友可以參考下
    2018-04-04
  • 自寫的利用PDO對(duì)mysql數(shù)據(jù)庫增刪改查操作類

    自寫的利用PDO對(duì)mysql數(shù)據(jù)庫增刪改查操作類

    這篇文章主要給大家介紹了關(guān)于自寫的利用PDO對(duì)mysql數(shù)據(jù)庫的增刪改查操作類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • PHP實(shí)現(xiàn)下載功能的代碼

    PHP實(shí)現(xiàn)下載功能的代碼

    PHP實(shí)現(xiàn)下載功能的代碼,并實(shí)現(xiàn)安全下載,隱藏文件真實(shí)地址等,需要的朋友可以參考下
    2012-09-09

最新評(píng)論

固始县| 甘南县| 安远县| 丹寨县| 桓仁| 常山县| 昌邑市| 山东省| 绥化市| 龙岩市| 横峰县| 肥西县| 绥棱县| 行唐县| 白沙| 陈巴尔虎旗| 察雅县| 铜川市| 盐源县| 会昌县| 新巴尔虎右旗| 郁南县| 渝中区| 恩施市| 永定县| 兴仁县| 临高县| 汾西县| 富顺县| 奈曼旗| 宜城市| 和静县| 桐柏县| 霍城县| 庐江县| 大竹县| 娱乐| 宿州市| 长泰县| 平远县| 手游|