Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中同时连接两个数据库_Php_Mysql_Database - Fatal编程技术网

如何在PHP中同时连接两个数据库

如何在PHP中同时连接两个数据库,php,mysql,database,Php,Mysql,Database,我试图从一个PHP脚本连接到同一个MySQL实例上的两个数据库 目前,我唯一能想到的方法是用不同的用户连接到两个数据库 我在迁移脚本中使用它,从原始数据库中获取数据并将其插入到新数据库中,因此我在大量结果列表中循环 连接到1个数据库,然后尝试与同一用户建立第二个连接,只会将当前数据库更改为新数据库 还有其他想法吗?您需要将布尔值true作为可选的第四个参数传递给mysql\u connect()。有关更多信息,请参阅。我建议使用两个连接处理程序 $old = mysql_connect('

我试图从一个PHP脚本连接到同一个MySQL实例上的两个数据库

目前,我唯一能想到的方法是用不同的用户连接到两个数据库

我在迁移脚本中使用它,从原始数据库中获取数据并将其插入到新数据库中,因此我在大量结果列表中循环

连接到1个数据库,然后尝试与同一用户建立第二个连接,只会将当前数据库更改为新数据库


还有其他想法吗?

您需要将布尔值true作为可选的第四个参数传递给mysql\u connect()。有关更多信息,请参阅。

我建议使用两个连接处理程序

   $old = mysql_connect('old.database.com', 'user', 'pass);
   mysql_select_db('old_db', $old);


   $new = mysql_connect('new.database.com','user','pass);
   mysql_select_db('new_db', $new)

   // run select query on $old
   // run matching insert query on $new

卢卡斯是对的。我假设这两个数据库托管在同一台主机上

或者,您可以只创建1个db连接,并根据需要继续交换数据库。这里是伪代码

$db_conn = connect_db(host, user, pwd);
mysql_select_db('existing_db', $db_conn);
 -- do selects and scrub data --
mysql_select_db('new_db', $db_conn);
-- insert the required data --

如果数据库用户可以访问这两个数据库,并且它们位于同一服务器上,则可以使用一个连接,只需在表名之前指定要使用的数据库即可。例如:

SELECT column
FROM database.table
根据您需要做的事情,您可能能够执行一个任务并节省大量处理时间

INSERT INTO database1.table (column)
SELECT database2.table.column
FROM database2.table

如果是一个选项,请使用PDO:您可以随意打开任意多个数据库连接


另外,假设您反复执行相同的查询,您可以使用准备好的语句。

您可以使用以下代码轻松地同时使用两个数据库:

<?php
  define('HOST', "YOURHOSTNAME");
  define('USER', "YOURHOSTNAME");
  define('PASS', "YOURHOSTNAME");
  define('DATABASE1', "NAMEOFDATABASE1");
  define('DATABASE2', "NAMEOFDATABASE2");

  $DATABASE1  = mysqli_connect(HOST, USER, PASS, DATABASE1);
  $DATABASE2  = mysqli_connect(HOST, USER, PASS, DATABASE2);
  if(!$DATABASE1){
      die("DATABASE1 CONNECTION ERROR: ".mysqli_connect_error());
   }
  if(!$DATABASE2){
      die("DATABASE2 CONNECTION ERROR: ".mysqli_connect_error());
   }


   $sql = "SELECT * FROM TABLE";   /* You can use your own query */

   $DATABASE1_QUERY = mysqli_query($DATABASE1, $sql);
   $DATABASE2_QUERY = mysqli_query($DATABASE2, $sql);

   $DATABASE1_RESULT = mysqli_fetch_assoc($DATABASE1_QUERY);
   $DATABASE2_RESULT = mysqli_fetch_assoc($DATABASE2_QUERY);

   /* SHOW YOUR RESULT HERE WHICH DATABASE YOU WANT FROM */
   echo  $DATABASE1_RESULT['id'];
   echo  $DATABASE2_RESULT['id'];


  /*After complete your all work don't forgot about close database connections*/
  mysqli_close($DATABASE1);
  mysqli_close($DATABASE2);
      ?>

首先连接两个数据库

$database1 = mysql_connect("localhost","root","password");
$database2 = mysql_connect("localhost","root","password");
现在选择数据库

$database1_select = mysql_select_db("db_name_1") or die("Can't Connect To Database",$database1);
$database_select = mysql_select_db("db_name_2") or die("Can't Connect To Database",$database2);
现在,如果要运行查询,请在末尾指定数据库名称,如

$select = mysql_query("SELECT * FROM table_name",$database1);

如果您使用2个连接处理程序,您一定要确保在使用它们之后关闭这两个连接。-Arunabh DasBut当脚本终止时,PHP将与数据库断开连接。我一直在努力弄清楚一个旧的PHP应用程序是如何做到这一点的。这现在是有意义的。作为一般指南,PHP中的变量不应大写,而应
$camelCased
。大写的单词更难读。@Martin-根据你的选择,你可以使用自己的风格。因为我只是试着用一些例子来回答这个问题,这是行不通的。您需要将true作为mysql\u connect中的第四个参数传递,否则它将返回上一个连接