我試圖從1個PHP腳本連接到2個數據庫的同一個MySQL實例。如何在PHP中同時連接到2個數據庫
目前我唯一的解決方法是用不同的用戶連接到兩個數據庫。
我在遷移腳本中使用它,我從原始數據庫中獲取數據並將其插入新數據庫,因此我正在循環大量的結果列表。
連接到1數據庫,然後嘗試與同一用戶發起第二次連接,只是將當前數據庫更改爲新數據庫。
還有其他想法嗎?
我試圖從1個PHP腳本連接到2個數據庫的同一個MySQL實例。如何在PHP中同時連接到2個數據庫
目前我唯一的解決方法是用不同的用戶連接到兩個數據庫。
我在遷移腳本中使用它,我從原始數據庫中獲取數據並將其插入新數據庫,因此我正在循環大量的結果列表。
連接到1數據庫,然後嘗試與同一用戶發起第二次連接,只是將當前數據庫更改爲新數據庫。
還有其他想法嗎?
您需要傳遞一個布爾值true作爲mysql_connect()的可選第四個參數。有關更多信息,請參閱PHP's mysql_connect() documentation。
我會建議使用兩個連接處理程序
$old = mysql_connect('old.database.com', 'user', 'pass);
mysql_select_db('old_db', $old);
$new = mysql_connect('new.database.com','user','pass);
mysql_select_db('new_db', $new)
// run select query on $old
// run matching insert query on $new
只有當兩個數據庫位於不同服務器上時,這才起作用。 – 2008-10-25 08:10:47
盧卡斯是正確的。我假設這兩個數據庫都託管在同一臺主機上。
或者,您可以只創建1個數據庫連接,並根據需要繼續交換數據庫。這是僞代碼。
$db_conn = connect_db(host, user, pwd);
mysql_select_db('existing_db', $db_conn);
-- do selects and scrub data --
mysql_select_db('new_db', $db_conn);
-- insert the required data --
如果你的數據庫用戶訪問數據庫和他們在同一臺服務器上,你可以使用一個連接,並只指定要使用的表名前工作數據庫。例如:
SELECT column
FROM database.table
取決於你需要做什麼,你也許可以做一個INSERT INTO
,節省了一堆的處理時間。
INSERT INTO database1.table (column)
SELECT database2.table.column
FROM database2.table
我正在努力弄清楚一個老的php應用程序是如何做到這一點的。這現在有道理。 – zkent 2016-05-04 16:36:37
如果是一個選項,請使用PDO:您可以根據需要打開儘可能多的數據庫連接。
另外,假設您一遍又一遍地執行相同的查詢,則可以使用預準備語句。
您可以輕鬆地使用在同一時間2個數據庫具有以下代碼:
<?php
define('HOST', "YOURHOSTNAME");
define('USER', "YOURHOSTNAME");
define('PASS', "YOURHOSTNAME");
define('DATABASE1', "NAMEOFDATABASE1");
define('DATABASE2', "NAMEOFDATABASE2");
$DATABASE1 = mysqli_connect(HOST, USER, PASS, DATABASE1);
$DATABASE2 = mysqli_connect(HOST, USER, PASS, DATABASE2);
if(!$DATABASE1){
die("DATABASE1 CONNECTION ERROR: ".mysqli_connect_error());
}
if(!$DATABASE2){
die("DATABASE2 CONNECTION ERROR: ".mysqli_connect_error());
}
$sql = "SELECT * FROM TABLE"; /* You can use your own query */
$DATABASE1_QUERY = mysqli_query($DATABASE1, $sql);
$DATABASE2_QUERY = mysqli_query($DATABASE2, $sql);
$DATABASE1_RESULT = mysqli_fetch_assoc($DATABASE1_QUERY);
$DATABASE2_RESULT = mysqli_fetch_assoc($DATABASE2_QUERY);
/* SHOW YOUR RESULT HERE WHICH DATABASE YOU WANT FROM */
echo $DATABASE1_RESULT['id'];
echo $DATABASE2_RESULT['id'];
/*After complete your all work don't forgot about close database connections*/
mysqli_close($DATABASE1);
mysqli_close($DATABASE2);
?>
作爲PHP的一般指南,變量不應該大寫,而應該是'$ camelCased`。大寫的單詞難以閱讀。 – Martin 2016-08-06 10:15:58
首先連接兩個數據庫
$database1 = mysql_connect("localhost","root","password");
$database2 = mysql_connect("localhost","root","password");
現在選擇數據庫
$database1_select = mysql_select_db("db_name_1") or die("Can't Connect To Database",$database1);
$database_select = mysql_select_db("db_name_2") or die("Can't Connect To Database",$database2);
現在,如果我們想運行查詢,然後在末尾指定數據庫名稱,如
$select = mysql_query("SELECT * FROM table_name",$database1);
如果您使用2個連接處理程序,那麼您一定要確保在使用它們後關閉兩個連接。 - Arunabh Das – 2009-12-29 05:17:02
但腳本終止時,PHP將與數據庫斷開連接http://php.net/manual/en/function.mysql-close.php – 2009-12-29 05:48:09