gpt4 book ai didi

php - 具有多个数据库的单例

转载 作者:可可西里 更新时间:2023-11-01 13:26:40 26 4
gpt4 key购买 nike

示例应用程序,包含员工信息并被工资单和 pos 等不同应用程序访问。我在一个数据库中有员工数据,工资单数据和 pos 分别在不同的数据库中。

我有一个如下所示的数据库连接类,所以每次我想连接到数据库时,我只需执行 $conn = Database::getInstance(db1)

效果很好,但基本上 super 慢。使应用程序运行非常慢。关于为什么会这样或更好的替代想法的任何提示?

任何帮助将不胜感激

<?php    
class Database {
private $db;
static $db_type;
static $_instance;

private function __construct($db){
switch($db) {
case "db1":
try{
$this->db = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASSWORD);
}
catch(PDOException $e){
print "Error!: " . $e->getMessage() . "<br />";
die();
}
break;
case "db2":
try{
$this->db = new PDO("mysql:host=" . DB_HOST_2 . ";dbname=" . DB_NAME_2, DB_USER_2, DB_PASSWORD_2);
}
catch(PDOException $e){
print "Error!: " . $e->getMessage() . "<br />";
die();
}
break;
}
self::$db_type = $db;

}

private function __clone(){}

static function getInstance($db_type){
if(!(self::$_instance) || $db != self::$db_type){
self::$_instance = new self($db_type);
}
return self::$_instance;
}
}
?>

最佳答案

有了这个设计。如果您更改数据库,则会破坏与先前数据库的连接。

为每个连接创建单独的对象,然后在连接对象之间切换。

另外,出于同样的原因,这不是线程安全的。如果多个函数同时触发此事件,一个可以在完成加载之前断开另一个。

您真的应该为每个函数创建一个新的连接对象,而不是在函数或其他对象之间共享它。

关于php - 具有多个数据库的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13187818/

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