使用PDO选择多个数据库

时间:2012-07-24 17:01:49

标签: php mysql database pdo

我有一个functions.php文件,其中有一个PDO用于访问数据库的连接以及所有这些好东西就是这个:

$host = "localhost";
$db = "maindatabase";
$adminuser = "admin";
$adminpw = "123456";
global $connection;

$connection = new Connection($host,$adminuser,$adminpw,$db);

require这个脚本在每个需要访问数据库的文件上,在某些情况下,我希望从$db = "maindatabase";更改为$db = "anotherdb";,我知道我可以只用一个二传手

来做
$connection->setDatabase("anotherdb");

但是,由于我require functions.php文件到其他所有文件中,我不知道它是否会将自身重写为默认值,是否有人知道如何更改它并使其保留?< BR />

修改

我已在代码中将require更改为require_once,因为PHP文档说如果文件已经需要,它将不再添加它,你认为吗?这会解决问题吗?

3 个答案:

答案 0 :(得分:2)

您可以为每个数据库建立两个连接

$host = "localhost";
$db1 = "maindatabase";
$db2 = "anotherdb";
$adminuser = "admin";
$adminpw = "123456";
global $connection1, $connection2;

$connection1 = new Connection($host,$adminuser,$adminpw,$db1);
$connection2 = new Connection($host,$adminuser,$adminpw,$db2);

答案 1 :(得分:2)

这是全局变量的经典问题。您的程序状态是不可预测的。您无法知道您所指的是哪个数据库。

您的解决方案是正确的依赖注入。

实现工厂类以按需生成正确的数据库连接,并且不使用全局变量。这是正确的解决方案。

答案 2 :(得分:1)

当涉及漂亮的代码时,根据你的肛门水平可能会变得很难看,但如果MySQL用户可以访问这两个数据库,为什么不在查询中指定数据库前缀呢?

示例:

SELECT * FROM maindatabase.tablename WHERE this='that';

在您的其他功能上,执行:

SELECT * FROM anotherdb.tablename WHERE this='that';

你也可以这样做:

$database_name = 'maindatabase';
$query = "SELECT * FROM {$database_name}.table";

$database_name = 'anotherdb';
$query = "SELECT * FROM {$database_name}.table";

这样您就可以根据需要切换$database_name变量。