經驗交流

連結資料庫(二)

問題說明
 當我們的應用程式規模較大,需要同時連結兩個以上的資料庫,在使用 mysql_query( ) 進行查詢時,就會相當不方便了。

我的做法
 假如程式需要同時連結兩個資料庫,我會在 configure.php 中先設定下列的資料:
<?
// Config for Primary Database
$cfgDB_HOST_1     = 'localhost';
$cfgDB_PORT_1     = '3306';
$cfgDB_USERNAME_1 = 'chensh';
$cfgDB_PASSWORD_1 = '123456';
$cfgDB_NAME_1 = "MyDatabase";

// Config for Secondary Database
$cfgDB_HOST_2     = '163.16.1.**';
$cfgDB_PORT_2     = '3306';
$cfgDB_USERNAME_2 = 'chensh';
$cfgDB_PASSWORD_2 = '123456';
$cfgDB_NAME_2 = "OtherDatabase";
?>

 再分別建立下列兩個檔案(connect_db_1.php 與 connect_db_2.php):
<?
// 建立資料庫連線(for MyDatabase)
$link_1 = mysql_connect($cfgDB_HOST_1 . ":" . $cfgDB_PORT_1, $cfgDB_USERNAME_1, $cfgDB_PASSWORD_1);
?>
<?
// 建立資料庫連線(for OtherDatabase)
$link_2 = mysql_connect($cfgDB_HOST_2 . ":" . $cfgDB_PORT_2, $cfgDB_USERNAME_2, $cfgDB_PASSWORD_2);
?>

 然後,在每一支需要連結資料庫的程式中,都將它們包進來(它們被放在根目錄下),便可對資料庫進行存取的動作了。請看下方的例子:
<?
// 取得系統組態
include ("/configure.php");

// 連結 MyDatabase(視需要而定)
include ("/connect_db_1.php");

// 連結 OtherDatabase(視需要而定)
include ("/connect_db_2.php");

// 自 user table 中讀取資料(MyDatabase)
$sql = "SELECT * from user WHERE username = 'chensh' ";
$rs_u = mysql_db_query($cfgDB_NAME_1, $sql, $link_1);

......

// 自 student table 中讀取資料(OtherDatabase)
$sql = "SELECT * from student WHERE stu_name = 'chensh' ";
$rs_s = mysql_db_query($cfgDB_NAME_2, $sql, $link_2);
?>

 在上述的程式中,需要同時查詢位於兩個不同資料庫中的資料,所以必須同時將 connect_db_1.php 與 connect_db_2.php 包含進來。
 此外,我改用 mysql_db_query( ) 來取代 mysql_query( ),在執行資料庫存取動作時,才指定資料庫名稱,以保持程式維護上的彈性。
 若將 connect_db_1.php 與 connect_db_2.php 合而為一呢?
 千萬不要這麼做!試想:不會每支程式都同時需要連結這兩個資料庫吧!避免建立不必要的連線,方能減輕資料庫的負擔,這是我的經驗。
經驗交流