2

我正在编写一个 cronjob,它将从一个表中传输数据,对其进行处理,然后将其应用于 Web 应用程序。为此,我有 2 个单独的数据库连接。目前,连接凭据是相同的,只是它是不同的数据库,但在上线时,它将完全分开。

问题是我正在创建一个连接,然后在我的班级中将其分配给 $this->staging,另一个称为 $this->production。我使用 mysql_ping 来确保两个连接都正常工作。

似乎发生的情况是,当它进行查询时,它会忽略连接标识符($this->staging 示例)并尝试对创建的 2 个连接中的最后一个进行查询。

我在查询中使用连接标识符:

 // Connection:

 $this->staging = $this->mysql($config['staging']);
 $this->production = $this->mysql($config['production']);

 $sql = "SELECT * FROM TABLE";
 $query = mysql_query($sql,$this->staging);

 // Returns an unknown table in database defined in $this->production.

我将 mysql_connect 作为 $this->mysql() 方法返回,而不是 mysql_select_db()。如果我尝试返回 mysql_select_db() mysql_ping 不起作用。

这是 mysql() 方法:

// connect(): Connect to a database (MySQL):

private function mysql($cred) {
    $connect = mysql_connect($cred['server'],$cred['username'],$cred['password']);
    if($connect) {
        $db = mysql_select_db($cred['database']);
        if($db) {
            return $connect;
        } else {
            $this->informer("[FATAL]","Could not make a mysql database connection on server ".$_SERVER['SERVER_ADDR']." for database: ".$cred['database']);
        }
    } else {
        $this->informer("[FATAL]","The database credentials appears to be wrong. ".$_SERVER['SERVER_ADDR']." for the mysql database: ".$cred['database']);
    }
}
4

1 回答 1

1

出现问题是因为您连接到同一个 MySql 服务器,当您连接到暂存(第二个连接)时,PHP 返回为生产创建的相同连接并且不创建新连接,以强制 PHP 创建一个新连接一个你应该改变“mysql_connect”调用是这样的:

 $connect = mysql_connect($cred['server'],$cred['username'],$cred['password'], true);

这将强制 PHP 开始一个新的连接。

参考:http ://www.php.net/mysql_connect

于 2012-06-04T15:35:37.720 回答