20

I am trying to connect to 2 databases on the same instance of MySQL from 1 PHP script.

At the moment the only way I've figured out is to connect to both databases with a different user for each.

I am using this in a migration script where I am grabbing data from the original database and inserting it into the new one, so I am looping through large lists of results.

Connecting to 1 database and then trying to initiate a second connection with the same user just changes the current database to the new one.

Any other ideas?

2
  • If you use 2 connection handlers, you definitely want to make sure you close both connections after using them. - Arunabh Das Commented Dec 29, 2009 at 5:17
  • But PHP will disconnect from the database when the script terminates php.net/manual/en/function.mysql-close.php Commented Dec 29, 2009 at 5:48

7 Answers 7

22

You'll need to pass a boolean true as the optional fourth argument to mysql_connect(). See PHP's mysql_connect() documentation for more info.

Sign up to request clarification or add additional context in comments.

Comments

15

If your database user has access to both databases and they are on the same server, you can use one connection and just specify the database you want to work with before the table name. Example:

SELECT column
FROM database.table

Depending on what you need to do, you might be able to do an INSERT INTO and save a bunch of processing time.

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

2 Comments

I was trying very hard to figure out how an old php app was doing this. This makes sense now.
after struggle of hours I finally find this. After defining the new Connection I have to declare database2.table , thanks.
8

Lucas is correct. I assume that both the databases are hosted on the same host.

Alternatively, you can create only 1 db connection and keep swapping the databases as required. Here is pseudo code.

$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 --

Comments

4

I would suggest using two connection handlers

   $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

Comments

3

If it's an option, use PDO: you can have as many database connections open as you like.

Plus, assuming your executing the same queries over and over, you can use prepared statements.

Comments

0

You can easily use 2 databases in same time with following Codes:

<?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);
      ?>

2 Comments

As a general guide variables in PHP should not be capitalised but $camelCased. Capitalised words are harder to read.
@Martin - According to your choice you can use your own style. Because I'm just try to give a answer about this question with some examples .
-1

First Connect Two Database

$database1 = mysql_connect("localhost","root","password");
$database2 = mysql_connect("localhost","root","password");

Now Select The Database

$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);

Now if we want to run query then specify database Name at the end like,

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

1 Comment

This doesn't work. You need to pass true as the 4th parameter in mysql_connect otherwise it will just return the previous connection

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.