0

我有 2 个数据库服务器 DRC 和生产服务器..

我将 php 配置文件与生产服务器 ip 连接以连接其数据库(它工作正常),如果生产数据库未连接、未选择或删除,则我做了一个 if 语句,然后去连接 DRC 服务器以获取其数据库.

下面的代码使此操作可以正常切换本地主机上的 2 个数据库,但如果生产数据库不可用,则它不会连接到 DRC 数据库。

//Production constants
defined ('DB_SERVER')? null : define ("DB_SERVER" , "20.20.10.1");
defined ('DB_USER') ? null : define ("DB_USER" , "root");
defined ('DB_PASS') ? null : define ("DB_PASS" , "rootpass");
defined ('DB_NAME') ? null : define ("DB_NAME" , "dbname");

//DRC constants
defined ('DB_SERVER_DRC')? null : define ("DB_SERVER_DRC" , "20.20.10.2");
defined ('DB_USER_DRC') ? null : define ("DB_USER_DRC" , "root");
defined ('DB_PASS_DRC') ? null : define ("DB_PASS_DRC" , "rootpass");
defined ('DB_NAME_DRC') ? null : define ("DB_NAME_DRC" , "dbname");


function __construct() {
    $this->open_connection();
}

public function open_connection() {
    $this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);
    if (!$this->connection) {
        $this->open_connection_DRC();
    } else {
        $db_select = mysql_select_db(DB_NAME, $this->connection);
        if (!$db_select) {
            $this->open_connection_DRC();
        }
    }
}

public function open_connection_DRC() {
    $this->connection = mysql_connect(DB_SERVER_DRC, DB_USER_DRC, DB_PASS_DRC);
    if (!$this->connection) {
        die("Database connection failed: " . mysql_error());
    } else {
        $db_select = mysql_select_db(DB_NAME_DRC, $this->connection);
        if (!$db_select) {
            die("Database selection failed: " . mysql_error());
        }
    }
}

任何解决方案或其他方式,等待您的积极回应。

4

2 回答 2

0

mysql_connect - Returns a MySQL link identifier on success or FALSE on failure. That's what you can do according to my knowledge. if it returns false connect to the other database.

于 2013-01-31T09:02:28.053 回答
0

您可以尝试在open_connection_DRC函数中进行以下更改,根据 PHP 手册,当您尝试打开多个连接时,您需要将第 5 个布尔参数$new_link 传递为 true。

我在这里假设您已连接到生产服务器并且生产服务器上没有数据库,因此您正在尝试打开与 DRC 服务器的新 mysql 连接。

public function open_connection_DRC() {
    $this->connection = mysql_connect(DB_SERVER_DRC, DB_USER_DRC, DB_PASS_DRC, true);

此外,一旦您发现生产服务器上不存在数据库,最好取消设置$this->connection 。

于 2013-01-31T09:17:08.597 回答