如何在PHP web应用程序中使用多个数据库?
我正在制作一个PHPWeb应用程序,其中我使用MySQL作为数据库服务器,我想将一些表从一个数据库备份到另一个数据库(其中包含这些表)。 我创建了两个不同的连接,但是表没有更新如何在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
$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^