国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison php教程 php手冊(cè) PHP單例模式編寫的PDO類的程序

PHP單例模式編寫的PDO類的程序

May 23, 2016 am 08:33 AM
Modèle Singleton PHP

下面的代碼是用此前一個(gè)名為MyPDO的類改寫的,引入了單例模式來(lái)保證在全局調(diào)用中不會(huì)重復(fù)實(shí)例化這個(gè)類,降低系統(tǒng)資源的浪費(fèi),用php大部分操作都是和各種數(shù)據(jù)庫(kù)打交道,包括mysql,redis,memcache等各種關(guān)系型和非關(guān)系型數(shù)據(jù)庫(kù),所以一個(gè)應(yīng)用中會(huì)存在大量連接數(shù)據(jù)庫(kù)的操作,如果不用單例模式,那每次都要new操作,但是每次new都會(huì)消耗大量的內(nèi)存資源和系統(tǒng)資源,而且每次打開和關(guān)閉數(shù)據(jù)庫(kù)連接都是對(duì)數(shù)據(jù)庫(kù)的一種極大考驗(yàn)和浪費(fèi),代碼如下:

<?php
class MyPDO {
    protected static $_instance = null;
    protected $dbName = &#39;&#39;;
    protected $dsn;
    protected $dbh;
    /** 
     * 構(gòu)造
     *
     * @return MyPDO
     */
    private function __construct($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset) {
        try {
            $this->dsn = &#39;mysql:host=&#39; . $dbHost . &#39;;dbname=&#39; . $dbName;
            $this->dbh = new PDO($this->dsn, $dbUser, $dbPasswd);
            $this->dbh->exec(&#39;SET character_set_connection=&#39; . $dbCharset . &#39;, character_set_results=&#39; . $dbCharset . &#39;, character_set_client=binary&#39;);
        }
        catch(PDOException $e) {
            $this->outputError($e->getMessage());
        }
    }
    /** 
     * 防止克隆
     *
     */
    private function __clone() {
    }
    /** 
     * Singleton instance
     *
     * @return Object
     */
    public static function getInstance($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset) {
        if (self::$_instance === null) {
            self::$_instance = new self($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset);
        }
        return self::$_instance;
    }
    /** 
     * Query 查詢
     *
     * @param String $strSql SQL語(yǔ)句
     * @param String $queryMode 查詢方式(All or Row)
     * @param Boolean $debug
     * @return Array
     */
    public function query($strSql, $queryMode = &#39;All&#39;, $debug = false) {
        if ($debug === true) $this->debug($strSql);
        $recordset = $this->dbh->query($strSql);
        $this->getPDOError();
        if ($recordset) {
            $recordset->setFetchMode(PDO::FETCH_ASSOC);
            if ($queryMode == &#39;All&#39;) {
                $result = $recordset->fetchAll();
            } elseif ($queryMode == &#39;Row&#39;) {
                $result = $recordset->fetch();
            }
        } else {
            $result = null;
        }
        return $result;
    }
    /** 
     * Update 更新
     *
     * @param String $table 表名
     * @param Array $arrayDataValue 字段與值
     * @param String $where 條件
     * @param Boolean $debug
     * @return Int
     */
    public function update($table, $arrayDataValue, $where = &#39;&#39;, $debug = false) {
        $this->checkFields($table, $arrayDataValue);
        if ($where) {
            $strSql = &#39;&#39;;
            foreach ($arrayDataValue as $key => $value) {
                $strSql.= ", `$key`=&#39;$value&#39;";
            }
            $strSql = substr($strSql, 1);
            $strSql = "UPDATE `$table` SET $strSql WHERE $where";
        } else {
            $strSql = "REPLACE INTO `$table` (`" . implode(&#39;`,`&#39;, array_keys($arrayDataValue)) . "`) VALUES (&#39;" . implode("&#39;,&#39;", $arrayDataValue) . "&#39;)";
        }
        if ($debug === true) $this->debug($strSql);
        $result = $this->dbh->exec($strSql);
        $this->getPDOError();
        return $result;
    }
    /** 
     * Insert 插入
     *
     * @param String $table 表名
     * @param Array $arrayDataValue 字段與值
     * @param Boolean $debug
     * @return Int
     */
    public function insert($table, $arrayDataValue, $debug = false) {
        $this->checkFields($table, $arrayDataValue);
        $strSql = "INSERT INTO `$table` (`" . implode(&#39;`,`&#39;, array_keys($arrayDataValue)) . "`) VALUES (&#39;" . implode("&#39;,&#39;", $arrayDataValue) . "&#39;)";
        if ($debug === true) $this->debug($strSql);
        $result = $this->dbh->exec($strSql);
        $this->getPDOError();
        return $result;
    }
    /** 
     * Replace 覆蓋方式插入
     *
     * @param String $table 表名
     * @param Array $arrayDataValue 字段與值
     * @param Boolean $debug
     * @return Int
     */
    public function replace($table, $arrayDataValue, $debug = false) {
        $this->checkFields($table, $arrayDataValue);
        $strSql = "REPLACE INTO `$table`(`" . implode(&#39;`,`&#39;, array_keys($arrayDataValue)) . "`) VALUES (&#39;" . implode("&#39;,&#39;", $arrayDataValue) . "&#39;)";
        if ($debug === true) $this->debug($strSql);
        $result = $this->dbh->exec($strSql);
        $this->getPDOError();
        return $result;
    }
    /** 
     * Delete 刪除
     *
     * @param String $table 表名
     * @param String $where 條件
     * @param Boolean $debug
     * @return Int
     */
    public function delete($table, $where = &#39;&#39;, $debug = false) {
        if ($where == &#39;&#39;) {
            $this->outputError("&#39;WHERE&#39; is Null");
        } else {
            $strSql = "DELETE FROM `$table` WHERE $where";
            if ($debug === true) $this->debug($strSql);
            $result = $this->dbh->exec($strSql);
            $this->getPDOError();
            return $result;
        }
    }
    /** 
     * execSql 執(zhí)行SQL語(yǔ)句
     *
     * @param String $strSql
     * @param Boolean $debug
     * @return Int
     */
    public function execSql($strSql, $debug = false) {
        if ($debug === true) $this->debug($strSql);
        $result = $this->dbh->exec($strSql);
        $this->getPDOError();
        return $result;
    }
    /** 
     * 獲取字段最大值
     *
     * @param string $table 表名
     * @param string $field_name 字段名
     * @param string $where 條件
     */
    public function getMaxValue($table, $field_name, $where = &#39;&#39;, $debug = false) {
        $strSql = "SELECT MAX(" . $field_name . ") AS MAX_VALUE FROM $table";
        if ($where != &#39;&#39;) $strSql.= " WHERE $where";
        if ($debug === true) $this->debug($strSql);
        $arrTemp = $this->query($strSql, &#39;Row&#39;);
        $maxValue = $arrTemp["MAX_VALUE"];
        if ($maxValue == "" || $maxValue == null) {
            $maxValue = 0;
        }
        return $maxValue;
    }
    /** 
     * 獲取指定列的數(shù)量
     *
     * @param string $table
     * @param string $field_name
     * @param string $where
     * @param bool $debug
     * @return int
     */
    public function getCount($table, $field_name, $where = &#39;&#39;, $debug = false) {
        $strSql = "SELECT COUNT($field_name) AS NUM FROM $table";
        if ($where != &#39;&#39;) $strSql.= " WHERE $where";
        if ($debug === true) $this->debug($strSql);
        $arrTemp = $this->query($strSql, &#39;Row&#39;);
        return $arrTemp[&#39;NUM&#39;];
    }
    /** 
     * 獲取表引擎
     *
     * @param String $dbName 庫(kù)名
     * @param String $tableName 表名
     * @param Boolean $debug
     * @return String
     */
    public function getTableEngine($dbName, $tableName) {
        $strSql = "SHOW TABLE STATUS FROM $dbName WHERE Name=&#39;" . $tableName . "&#39;";
        $arrayTableInfo = $this->query($strSql);
        $this->getPDOError();
        return $arrayTableInfo[0][&#39;Engine&#39;];
    }
    /** 
     * beginTransaction 事務(wù)開始
     */
    private function beginTransaction() {
        $this->dbh->beginTransaction();
    }
    /** 
     * commit 事務(wù)提交
     */
    private function commit() {
        $this->dbh->commit();
    }
    /** 
     * rollback 事務(wù)回滾
     */
    private function rollback() {
        $this->dbh->rollback();
    }
    /** 
     * transaction 通過事務(wù)處理多條SQL語(yǔ)句
     * 調(diào)用前需通過getTableEngine判斷表引擎是否支持事務(wù)
     *
     * @param array $arraySql
     * @return Boolean
     */
    public function execTransaction($arraySql) {
        $retval = 1;
        $this->beginTransaction();
        foreach ($arraySql as $strSql) {
            if ($this->execSql($strSql) == 0) $retval = 0;
        }
        if ($retval == 0) {
            $this->rollback();
            return false;
        } else {
            $this->commit();
            return true;
        }
    }
    /** 
     * checkFields 檢查指定字段是否在指定數(shù)據(jù)表中存在
     *
     * @param String $table
     * @param array $arrayField
     */
    private function checkFields($table, $arrayFields) {
        $fields = $this->getFields($table);
        foreach ($arrayFields as $key => $value) {
            if (!in_array($key, $fields)) {
                $this->outputError("Unknown column `$key` in field list.");
            }
        }
    }
    /** 
     * getFields 獲取指定數(shù)據(jù)表中的全部字段名
     *
     * @param String $table 表名
     * @return array
     */
    private function getFields($table) {
        $fields = array();
        $recordset = $this->dbh->query("SHOW COLUMNS FROM $table");
        $this->getPDOError();
        $recordset->setFetchMode(PDO::FETCH_ASSOC);
        $result = $recordset->fetchAll();
        foreach ($result as $rows) {
            $fields[] = $rows[&#39;Field&#39;];
        }
        return $fields;
    }
    /** 
     * getPDOError 捕獲PDO錯(cuò)誤信息
     */
    private function getPDOError() {
        if ($this->dbh->errorCode() != &#39;00000&#39;) {
            $arrayError = $this->dbh->errorInfo();
            $this->outputError($arrayError[2]);
        }
    }
    /** 
     * debug
     *
     * @param mixed $debuginfo
     */
    private function debug($debuginfo) {
        var_dump($debuginfo);
        exit();
    }
    /** 
     * 輸出錯(cuò)誤信息
     *
     * @param String $strErrMsg
     */
    private function outputError($strErrMsg) {
        throw new Exception(&#39;MySQL Error: &#39; . $strErrMsg);
    }
    /** 
     * destruct 關(guān)閉數(shù)據(jù)庫(kù)連接
     */
    public function destruct() {
        $this->dbh = null;
    }
}


調(diào)用方法:

<?php
require &#39;MyPDO.class.php&#39;;
$db = MyPDO::getInstance(&#39;localhost&#39;, &#39;root&#39;, &#39;123456&#39;, &#39;test&#39;, &#39;utf8&#39;);
//do something...
$db->destruct();


文章網(wǎng)址:

隨意轉(zhuǎn)載^^但請(qǐng)附上教程地址。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276