加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

我有这个PDO毗连类吗?

发布时间:2021-01-18 19:23:19 所属栏目:编程 来源:网络整理
导读:最近几天,我一向在与PDO交换,我正在开拓一个小型CMS体系,以自学OOP手艺,可是纵然它只是一个小型CMS,我也但愿它可以或许处理赏罚任何收集上的操纵扔给它. 到今朝为止,这就是我要提出的内容,我将向结构函数添加毗连池,以按照必要启用大量并发毗连.我对OOP常识还很生疏,

最近几天,我一向在与PDO交换,我正在开拓一个小型CMS体系,以自学OOP手艺,可是纵然它只是一个小型CMS,我也但愿它可以或许处理赏罚任何收集上的操纵扔给它.

到今朝为止,这就是我要提出的内容,我将向结构函数添加毗连池,以按照必要启用大量并发毗连.我对OOP常识还很生疏,因此我必要一些提媾和品评,毫无疑问,我在这里做错了很是严峻的工作.

尽量我添加了一个私有结构函数,由于我想在整个类中行使$this-> dbConnectionInstance来行使很多帮助函数,但我照旧将Global or Singleton for database connection?作为基本计划.

很是感激您的名贵时刻,假如您能给我任何提议,我将不胜谢谢,

-画

// Usage Example: $dbconn = dbManager::getConnection();
//                $dbconn->query("SELECT * FROM accounts WHERE id=:id","':id' => $id");

<?php

class dbManager {
    private static $dbManagerInstance;
    private $dbConnectionInstance;
    private $stime;
    private $etime;
    public $timespent;
    public $numqueries;
    public $queries = array();

    public static function getManager(){
        if (!self::$dbManagerInstance){
            self::$dbManagerInstance = new dbManager();
        }
        return self::$dbManagerInstance;
    }

    // Server details stored in definition file
    private function __construct($db_server=DB_SERVER,$db_user=DB_USER,$db_pass=DB_PASS,$db_params=array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")) {
        if(!$this->dbConnectionInstance)
        {
            try{
                $this->dbConnectionInstance = new PDO($db_server,$db_user,$db_pass,$db_params);
                $this->dbConnectionInstance->setAttribute(PDO::ATTR_PERSISTENT,PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
            } catch (PDOException $e) {
                $this->dbConnectionInstance = null;
                die($e->getMessage());
            }
        }
        return $this->dbConnectionInstance;
    }

    private function __destruct(){
        $this->dbConnectionInstance = null;
    }

    private function query($sql,$params = array()) {
        $this->queries[] = $sql;
        $this->numqueries++;
        $this->sTime = microtime();
        $stmt = $this->dbConnectionInstance->prepare($sql);
        $stmt->execute($params);
        $this->eTime = microtime();
        $this->timespent += round($this->eTime - $this->sTime,4);
        return $stmt;
    }

}

?>

感谢你们的提议,我此刻已经将回滚和提交添加到了非常处理赏罚中,我只是在研究缓冲查询的行使,我不完全确定这会给我带来什么? 最佳谜底 看起来不错,我将添加rollback成果以及缓冲的查询/ errorInfo提议(假如您行使的是支持事宜的RDBMS):

try {
    $this->dbConnectionInstance->beginTransaction();
    $stmt = $this->dbConnectionInstance->prepare($sql);
    $stmt->execute($params);
    $this->dbConnectionInstance->commit();
}catch(PDOException $e){
    $this->dbConnectionInstance->rollback();
}

commit(),beginTransaction()

编辑:添加以下链接以获取有关缓冲查询的更多信息:

> mysql performance blog
> pdo mysql buffered query support
> stack overflow: pdo buffered query problem

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读