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

如何在PHP web应用程序中使用多个数据库?,php,mysql,multiple-databases,Php,Mysql,Multiple Databases,我正在制作一个PHPWeb应用程序,其中我使用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

我正在制作一个PHPWeb应用程序,其中我使用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);
}
上面的代码从第一个数据库获取emp数据,并将其更新到另一个数据库的另一个备份表中。
代码工作不正常,是否有其他方法可以执行此操作…请帮助。

首先:您可能要打开数百个连接,运行查询并关闭它们,只是为了再次打开它们

从循环中取出第二条connect语句

其次,您必须告诉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\u connect语句将使用相同的连接id

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

$dbcon2 = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD, true)

首先:您可能会打开数百个连接,运行一个查询并关闭它们,只是为了再次打开它们

从循环中取出第二条connect语句

其次,您必须告诉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\u connect语句将使用相同的连接id

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

$dbcon2 = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD, true)

如果两个数据库位于同一服务器上,并且表具有相同的架构,则应改用此查询:

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

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

如果两个数据库位于同一台服务器上,并且表具有相同的架构,那么您应该改用此查询:

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

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

您只需更改代码中的一行即可:

$dbcon2=mysql\u connect(DB\u服务器、DB\u用户、DB\u密码,true)或die(mysql\u error())


您只需更改代码中的一行:

$dbcon2=mysql\u connect(DB\u服务器、DB\u用户、DB\u密码,true)或die(mysql\u error())


你为什么需要这么多的联系。这让事情变得更复杂了

为什么你需要这么多的连接呢。这会使事情变得更复杂

你应该:

  • 按照建议,将第二个DB的连接线置于环路外部
  • 必须在select db语句中指定dbcon1或2
  • 将true作为最后一个参数添加到第二个连接请求
  • 在插入值之前测试它们 (不要忘记,在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
希望能有帮助

你应该:

  • 按照建议,将第二个DB的连接线置于环路外部
  • 必须在select db语句中指定dbcon1或2
  • 将true作为最后一个参数添加到第二个连接请求
  • 在插入值之前测试它们 (不要忘记,在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^