在1个类中使用多个mysql连接

时间:2012-06-04 14:30:37

标签: php mysql

我正在编写一个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']);
    }
}

1 个答案:

答案 0 :(得分:1)

问题发生是因为您连接到同一个MySql服务器,当您连接到分段(第二个连接)时,PHP返回为生产创建的相同连接而不创建新连接,以强制PHP创建一个新的,您应该将“mysql_connect”调用更改为:

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

这会强制PHP启动新连接。

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