Php 我有这个PDO连接类吗?

Php 我有这个PDO连接类吗?,php,mysql,oop,pdo,Php,Mysql,Oop,Pdo,在过去的几天里,我一直在玩PDO,我正在开发一个小型CMS系统来教自己OOP技能,但即使它只是一个小型CMS,我希望它能够处理网络可能对它造成的任何影响 这就是我到目前为止所想到的,我将向构造函数添加连接池,以支持大量按需并发连接。我对OOP这个东西很陌生,所以我想要一些建议和批评,毫无疑问我在这里做了一些非常错误的事情 虽然我添加了一个私有构造函数,因为我想在整个类中使用$this->dbConnectionInstance,以供许多助手函数使用,但我还是将最上面的答案作为基本设计 非常感谢您

在过去的几天里,我一直在玩PDO,我正在开发一个小型CMS系统来教自己OOP技能,但即使它只是一个小型CMS,我希望它能够处理网络可能对它造成的任何影响

这就是我到目前为止所想到的,我将向构造函数添加连接池,以支持大量按需并发连接。我对OOP这个东西很陌生,所以我想要一些建议和批评,毫无疑问我在这里做了一些非常错误的事情

虽然我添加了一个私有构造函数,因为我想在整个类中使用$this->dbConnectionInstance,以供许多助手函数使用,但我还是将最上面的答案作为基本设计

非常感谢您抽出时间,我非常感谢您给我的任何建议

-德鲁

用法示例:$dbconn=dbManager::getConnection(); //$dbconn->query(“从帐户中选择*,其中id=:id“,”:id'=>$id”);

谢谢你们两位的建议,我现在已经在异常处理中添加了回滚和提交,我只是在研究缓冲查询的使用,我不完全确定这会给我带来什么?

您使用的代码看起来太糟糕了。但是,如果我可以做一些小的更改(主要是错误处理)

prepare和execute语句在出错时都将返回false。您可以从上面示例中的
$this->dbConnectionInstance->errorInfo()
访问错误

另外,如果您计划使用任何大型查询,我建议使用缓冲查询:
PDO::MYSQL\u ATTR\u USE\u buffered\u query=>true

看起来是个好的开始。祝您在CMS上好运。

看起来不错,我会添加功能,以及缓冲查询/错误信息建议(如果您使用的是支持事务的RDBMS):

,

编辑:在下面添加链接,了解有关缓冲查询的更多信息:

// 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;
    }

}

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