我正在编写一个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']);
}
}
答案 0 :(得分:1)
问题发生是因为您连接到同一个MySql服务器,当您连接到分段(第二个连接)时,PHP返回为生产创建的相同连接而不创建新连接,以强制PHP创建一个新的,您应该将“mysql_connect”调用更改为:
$connect = mysql_connect($cred['server'],$cred['username'],$cred['password'], true);
这会强制PHP启动新连接。