如何在PHP Web应用程序中使用多个数据库?

Har*_*rup 1 php mysql multiple-databases

我正在制作一个PHP Web应用程序,其中我使用MySQL作为数据库服务器,我想将一些表的备份从一个数据库备份到另一个数据库(其中包含该表).我创建了两个不同的连接,但表没有更新.

$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);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码从第一个数据库获取emp的数据,并将其更新到另一个数据库的另一个backup_emp表中.代码工作不正常,有没有其他方法这样做...请帮助.

Chr*_*der 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);
}
Run Code Online (Sandbox Code Playgroud)

最后一件小事:如果两个连接都使用相同的用户名和相同的密码转到同一台服务器,那么两个mysql_connect语句将使用相同的连接ID.

这就是为什么你需要将第二个连接语句中的第四个语句(新链接)设置为true:

$dbcon2 = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD, true)
Run Code Online (Sandbox Code Playgroud)


too*_*php 5

如果两个数据库位于同一服务器上,并且这些表具有相同的模式,那么您应该使用此查询:

mysql_query("INSERT INTO database2.backup_emp SELECT * FROM database1.emp");
Run Code Online (Sandbox Code Playgroud)

这样您就不必担心多个数据库连接.