2010-04-23 64 views
1

我正在在我使用MySQL作爲數據庫服務器,PHP Web應用程序,我想使從一個數據庫中的一些表的備份到另一個數據庫(在認爲表)。 我已經創建了兩個不同的連接,但表格未更新。如何在PHP Web應用程序中使用多個數據庫?

$dbcon1 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error()); 
$dbase1 = mysql_select_db(TEMP_DB_NAME,$dbcon)or die(mysql_error()); 

$query1=mysql_query("SELECT * FROM emp"); 

while($row = mysql_fetch_array($query1, MYSQL_NUM)) 
{ 
    $dbcon2 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error()); 
    $dbase2 = mysql_select_db(TEMP_DB_NAME2,$dbcon)or die(mysql_error()); 

    mysql_query("INSERT INTO backup_emp VALUES(null,'$row[1]',$row[2])"); 
    mysql_close($dbcon2); 
} 

上面的代碼從第一數據庫服用EMP的數據,並將其updataing到另一個數據庫中的另一backup_emp表。 代碼工作不正常,有沒有這樣做的任何其他方式......請幫助。

回答

5

如果這兩個數據庫,它們是在同一臺服務器上,並表具有相同的架構,那麼你就應該使用這個查詢:

mysql_query("INSERT INTO database2.backup_emp SELECT * FROM database1.emp"); 

這樣你就不需要擔心多個數據庫連接。

6

首先:你可能打開數以百計的連接,運行查詢,並關閉它們,只是再次重新打開它們。

在第二個連接語句跳出循環。

其次,你要告訴PHP,這命令供其連接,例如:

$query1 = mysql_query("SELECT * FROM emp", $dbcon1); 

while($row = mysql_fetch_array($query1, MYSQL_NUM)) 
{ 
    mysql_query("INSERT INTO backup_emp VALUES(null,'$row[1]',$row[2])", $dbcon2); 
} 

有一個最後的小東西:如果同時連接到同一臺服務器使用相同的用戶名和相同密碼,這兩個mysql_connect語句將使用相同的連接ID結束。

這就是爲什麼你需要設置你的第二個連接語句中的第四條語句(新鏈接)爲true:

$dbcon2 = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD, true) 
1
INSERT INTO db2.table SELECT * FROM db1.table 
0

所有u需要的是改變一個線在我們的代碼:

$ dbcon2 =的mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD,)或死亡(mysql_error());

$dbcon1 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error()); 
$dbase1 = mysql_select_db(TEMP_DB_NAME,$dbcon)or die(mysql_error()); 

$query1=mysql_query("SELECT * FROM emp"); 

while($row = mysql_fetch_array($query1, MYSQL_NUM)) 
{ 
    $dbcon2 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD,true) or die(mysql_error()); 
    $dbase2 = mysql_select_db(TEMP_DB_NAME2,$dbcon)or die(mysql_error()); 

    mysql_query("INSERT INTO backup_emp VALUES(null,'$row[1]',$row[2])"); 
    mysql_close($dbcon2); 
} 
1

爲什麼你需要這麼多的連接。這使得事情變得更加複雜

1

您應該:

  • 把第二DB連接線的循環之外的建議
  • 你在選擇數據庫語句指定dbcon1或2
  • 作爲最後一個參數插入他們 前添加真到了第二個連接請求
  • 測試你的價值觀(不要忘記行索引在PHP從零開始,而不是1)。

大概如下工作:

$dbcon1 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error()); 
$dbase1 = mysql_select_db(TEMP_DB_NAME,$dbcon1) or die(mysql_error()); 
$dbcon2 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD,true) or die(mysql_error()); 
$dbase2 = mysql_select_db(TEMP_DB_NAME2,$dbcon2) or die(mysql_error()); 
$errors= array(); 

$query1= mysql_query("SELECT * FROM emp"); 

while($row = mysql_fetch_array($query1, MYSQL_NUM)) 
{ 
    if (!isset($row[1])) 
     $row[1]= 'null'; //or generates an error 
    else 
     $row[1]= "'".$row[1]."'"; 
    if (!isset($row[2])) $row[2]= 'null'; //or generates an error 
    if (mysql_query("INSERT INTO backup_emp VALUES(null,".$row[1].",".$row[2].")") !== true) 
     $errors[]= "Problem inserting values (".$row[1].",".$row[2].")."); 
} 
mysql_free_result($query1); 
mysql_close($dbcon1); 
mysql_close($dbcon2); 

但是,如果你不需要做額外的計算,支票或任何對數據一樣,下面的建議是一樣好:

INSERT INTO db2.table SELECT * FROM db1.table 

希望它可以幫助

C 1-6

相關問題