gpt4 book ai didi

php - 我有这个 PDO 连接类吗?

转载 作者:可可西里 更新时间:2023-11-01 08:23:05 25 4
gpt4 key购买 nike

最近几天我一直在玩 PDO,我正在开发一个小型 CMS 系统来自学 OOP 技能,但即使它只是一个小型 CMS,我也希望它能够处理任何事情网络可以抛出它。

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

我选择了 Global or Singleton for database connection? 的最佳答案作为基本设计,尽管我添加了一个私有(private)构造函数,因为我想在整个类中使用 $this->dbConnectionInstance 以供使用许多辅助函数。

非常感谢您的宝贵时间,我真的很感激您能给我的任何建议,

-德鲁

// 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功能,以及缓冲查询/错误信息建议(如果您使用的是支持事务的 RDBMS):

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

commit() , beginTransaction()

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

关于php - 我有这个 PDO 连接类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1630588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com