Как подключиться к 2 базам данных одновременно в PHP - PullRequest
18 голосов
/ 25 октября 2008

Я пытаюсь подключиться к 2 базам данных на одном экземпляре MySQL из 1 скрипта PHP.

На данный момент единственный способ, который я понял, - это подключиться к обеим базам данных с разными пользователями для каждого.

Я использую это в сценарии миграции, где я собираю данные из исходной базы данных и вставляю их в новую, поэтому я перебираю большие списки результатов.

Соединение с 1 базой данных и затем попытка инициировать второе соединение с тем же пользователем просто изменяет текущую базу данных на новую.

Есть еще идеи?

Ответы [ 7 ]

22 голосов
/ 25 октября 2008

Вам нужно передать логическое значение true в качестве необязательного четвертого аргумента в mysql_connect (). См. PHP mysql_connect () документация для получения дополнительной информации.

13 голосов
/ 25 октября 2008

Если пользователь вашей базы данных имеет доступ к обеим базам данных, и они находятся на одном и том же сервере, вы можете использовать одно соединение и просто указать базу данных, с которой вы хотите работать, перед именем таблицы. Пример:

SELECT column
FROM database.table

В зависимости от того, что вам нужно сделать, вы можете сделать INSERT INTO и сэкономить кучу времени на обработку.

INSERT INTO database1.table (column)
SELECT database2.table.column
FROM database2.table
8 голосов
/ 25 октября 2008

Лукас прав. Я предполагаю, что обе базы данных размещены на одном хосте.

Кроме того, вы можете создать соединение только на 1 дБ и продолжать заменять базы данных по мере необходимости. Вот псевдокод.

$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 --
3 голосов
/ 25 октября 2008

Если это вариант, используйте PDO: вы можете открыть столько соединений с базой данных, сколько захотите.

Кроме того, если вы выполняете одни и те же запросы снова и снова, вы можете использовать подготовленные операторы.

3 голосов
/ 25 октября 2008

Я бы предложил использовать два обработчика соединения

   $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
0 голосов
/ 06 августа 2016

База данных First Connect Two

$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);
0 голосов
/ 06 августа 2016

Вы можете легко использовать 2 базы данных одновременно со следующими кодами:

<?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);
      ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...