2010-04-23 70 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

相关问题