2012-06-04 16 views
1

我正在編寫一個cronjob,它將從一個表中傳輸數據,對其進行處理,然後將其應用於Web應用程序。我有2個單獨的數據庫連接。目前,除了不同的數據庫外,連接憑證是相同的,但上線後,它將完全分離。在1個類中使用多個mysql連接

問題是我創建了一個連接,然後在我的類中將它分配給$ 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爲$這 - >的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

你的mysql(..)函數是怎麼樣的?它是否在正確的連接上使用mysql_select_db? – klaustopher

+1

[你如何連接到單個網頁上的多個MySQL數據庫?](http://stackoverflow.com/questions/274892/how-do-you-connect-to-multiple-mysql-databases-on-單網頁) –

+1

查看上面的重複內容,並記住將第二個'mysql_connect'語句的第四個參數設置爲'true'。 –

回答

1

的問題發生,因爲你正在連接到同一個MySQL服務器時,當您連接到分期(第二連接)的PHP返回創建相同的連接生產不創建一個新的,迫使PHP創建一個新的,你應該改變「的mysql_connect」調用是這樣的:

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

這將迫使PHP,開始一個新的連接。

Ref:http://www.php.net/mysql_connect