如何连接两个数据库实例(有一些规则)(PHP PDO)
我该怎么做?如何连接两个数据库实例(有一些规则)(PHP PDO)
规则是:
- 可以存在两个数据库(主机和从机);
- 只能存在一个数据库(master);
- 如果查询是SELECT并且从属数据库可用,则应该在从属数据库上执行查询。
- 如果查询不是SELECT或从属数据库不可用,则应在主数据库上执行查询。
一些注意事项:
- 两个数据库都在同一台服务器
- 数据库是在不同的港口
- 数据库实例
$db
应在其他类中注入......但哪个实例?主人还是奴隶?我还不知道查询是否是SELECT。
有些疑惑:
- 我需要2个数据库实例,对不对?
- 我应该扩展PDO准备方法吗?我认为这是一种糟糕的做法,但总比没有好。
没有这个的“开箱即用”的功能,但是,你应该能够建立这种没有很多的问题,
创建一个PHP类将提供所需的行为。 对不同数据库的连接数量没有限制。
所以,你的类应该初始化2个DB连接参见(http://php.net/manual/en/pdo.construct.php)
创建读取功能,并写入功能。并确保所有应用程序I/O都运行此类。
为了确保你不需要每次都重新连接,我建议你让你的班级成为一个单身人士。见(https://en.wikipedia.org/wiki/Singleton_pattern)
类会是这个样子
<?php
class DB {
protected static $instance = null;
protected $master;
protected $slave;
public static function getInstance()
{
if (!isset(static::$instance)) {
static::$instance = new static;
}
return static::$instance;
}
public __construct(){
// init master and slave connection
}
public read($sql){
// read slave
// if not exists read master
}
public write($sql){
// write to master
}
}
?>
确保您捕捉异常,如果连接不菱看到http://php.net/manual/en/language.exceptions.php
希望这将让你对你的方式
对不起@Tim我没有得到重点。 – SandroMarques
主要观点:如果你想要描述的那种功能,你需要建立它。您可以在一个实例中创建2个连接。如果你想在任何地方使用DB类(如示例中所示),只需执行诸如DB :: getInstance() - > read(“Select * from example”) – Tim
如果你想有更具体的答案:share一些代码示例为您的情况。 – Tim
您可以连接到两个数据库,但可以一次访问一个数据库吗?我担心,如果你希望同时访问它,那么它是不可能的。 – shashi
@shashi一次可以连接一个实例(我想我需要两个实例)。 – SandroMarques
是的,使两个连接对象,并根据您的需要使用它们 – shashi