3
回答
php pdo单例模式怎么同时连接两个数据库?
终于搞明白,存储TCO原来是这样算的>>>   

三个库都在同一个mysql服务器上,一个库里的user表的登录密码改了其他两个库里的也要改,现在用的pdo单例模式连接,同时写了两个连接句柄,不管是把第一个连接句柄的变量unset还是置为空,打印第二个变量出来都是第一个句柄的值,哪位大神能给个同时连两个数据库并可以同时增删改的思路,最好还是基于pdo单例模式。感谢!

举报
xuweijia90324
发帖于1个月前 3回/151阅

同一个服务是可以的。贴代码

define("DB_HOST","localhost");
define("DB_NAME","test");
define("DB_USER","root");
define("DB_PASSWORD","root");

Class SafePDO extends PDO {
        public static function exception_handler($exception) {
            die('Uncaught exception: '. $exception->getMessage());
        }
        public function __construct($dsn, $username='', $password='', $driver_options=array()) {
            set_exception_handler(array(__CLASS__, 'exception_handler'));
            parent::__construct($dsn, $username, $password, $driver_options);
            restore_exception_handler();
        }
}

$dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8';
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
    );
$pdo = new SafePDO($dsn,DB_USER,DB_PASSWORD);

$ret = $pdo->query("SELECT * FROM teacher limit 1");

echo "LOCAL DB";

while ($o = $ret->fetch())
{
    print_r($o);
}

echo "OVER DB";

$ret = $pdo->query("SELECT * FROM mysql.user limit 1");

while ($o = $ret->fetch())
{
    print_r($o);
}

 

--- 共有 1 条评论 ---
xuweijia90324试了,可以的,感谢。 1个月前 回复

两个实例, 不可能是一个库啊,  代码发上来. 

--- 共有 2 条评论 ---
Tuesday 回复 @xuweijia90324 : 你这是单例啊, 有静态缓存. 1个月前 回复
xuweijia90324实例1:$db1 = MyPDO::getInstance($host,$user,$pwd,$dbname1,'utf-8'); 实例2:$db2 = MyPDO::getInstance($host,$user,$pwd,$dbname2,'utf-8'); 1个月前 回复
顶部