我试图从1个PHP脚本连接到2个数据库的同一个MySQL实例。如何在PHP中同时连接到2个数据库
目前我唯一的解决方法是用不同的用户连接到两个数据库。
我在迁移脚本中使用它,我从原始数据库中获取数据并将其插入新数据库,因此我正在循环大量的结果列表。
连接到1数据库,然后尝试与同一用户发起第二次连接,只是将当前数据库更改为新数据库。
还有其他想法吗?
我试图从1个PHP脚本连接到2个数据库的同一个MySQL实例。如何在PHP中同时连接到2个数据库
目前我唯一的解决方法是用不同的用户连接到两个数据库。
我在迁移脚本中使用它,我从原始数据库中获取数据并将其插入新数据库,因此我正在循环大量的结果列表。
连接到1数据库,然后尝试与同一用户发起第二次连接,只是将当前数据库更改为新数据库。
还有其他想法吗?
您需要传递一个布尔值true作为mysql_connect()的可选第四个参数。有关更多信息,请参阅PHP's mysql_connect() documentation。
我会建议使用两个连接处理程序
$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
只有当两个数据库位于不同服务器上时,这才起作用。 – 2008-10-25 08:10:47
卢卡斯是正确的。我假设这两个数据库都托管在同一台主机上。
或者,您可以只创建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 --
如果你的数据库用户访问数据库和他们在同一台服务器上,你可以使用一个连接,并只指定要使用的表名前工作数据库。例如:
SELECT column
FROM database.table
取决于你需要做什么,你也许可以做一个INSERT INTO
,节省了一堆的处理时间。
INSERT INTO database1.table (column)
SELECT database2.table.column
FROM database2.table
我正在努力弄清楚一个老的php应用程序是如何做到这一点的。这现在有道理。 – zkent 2016-05-04 16:36:37
如果是一个选项,请使用PDO:您可以根据需要打开尽可能多的数据库连接。
另外,假设您一遍又一遍地执行相同的查询,则可以使用预准备语句。
您可以轻松地使用在同一时间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);
?>
作为PHP的一般指南,变量不应该大写,而应该是'$ camelCased`。大写的单词难以阅读。 – Martin 2016-08-06 10:15:58
首先连接两个数据库
$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 Das – 2009-12-29 05:17:02
但脚本终止时,PHP将与数据库断开连接http://php.net/manual/en/function.mysql-close.php – 2009-12-29 05:48:09