在单个脚本中连接多个数据库的优缺点

Cod*_*fee 12 php mysql sql database database-connection

假设用户在单个主机上托管了两个数据库,我需要连接到它们,以便我可以随时使用任何表而无需多次添加连接代码.

我已经在CodeIgniter中实现了这一点,在database.php文件中添加了两个数据库的授权详细信息,并$this->load->database('dbname');在脚本中加载了所需的数据库.

现在,对于核心PHP,我们可以这样做:

mysql_connect ('host','user','password','port','dbname'); // connection with one database.   
Run Code Online (Sandbox Code Playgroud)

它与我的第一个数据库连接.

现在,我想连接第二个数据库:

1)我没有关闭上面的连接并与第二个连接

mysql_connect ('host','user','password','port','dbname1');.
Run Code Online (Sandbox Code Playgroud)

2)这样做是不好的做法?它会消耗更多的物体吗?我们是否应该被要求先关闭第一个?

Dav*_*san 14

仅使用同一服务器上的2个数据库中的表打开2连接是不必要的.您只需要使用database.table表示法.这样做意味着您甚至可以在同一查询中连接来自不同数据库的表

SELECT t1.col1, t1.col2, t2.col2, t2.col2
FROM db1.table1 AS t1 JOIN db2.table1 AS t2 ON t1.col1 = t2.col3
Run Code Online (Sandbox Code Playgroud)

因此,如果您最初已连接到db1,则可以使用db2表,如果连接到db2,则可以使用db1表.


小智 7

你试过这个吗?

$mysqli1 = new mysqli("example.com", "user", "password", "database1");

$mysqli2 = new mysqli("example.com", "user", "password", "database2");
Run Code Online (Sandbox Code Playgroud)


PHP*_*... 5

您可以通过遵循面向对象的方法来实现

首先创建与两个数据库的连接:

$Db1 = new mysqli('localhost','root','','database1'); // this is object of database 1
$Db2 = new mysqli('localhost','root','','database2'); // this is object of database 2

$query1 = 'select * from `table_name_of_database1`';  // Query to be run on DB1
$query2 = 'select * from `table_name_of_database2`';   // Query to be run on DB2

$result1 = $Db1->query($query1); // Executing query on database1 by using $Db1
$result2 = $Db2->query($query2); // Executing query on database2 by using $Db2

echo "<pre>";

/* Print result of $query1 */

if ($result1->num_rows > 0) {
    while($row = $result1->fetch_assoc()) {
        print_r($row);
    }
} else {
    echo "0 results";
}


/*========================================================*/


/* Print result of $query2 */

if ($result2->num_rows > 0) {
    while($row = $result2->fetch_assoc()) {
         print_r($row);
    }
} else {
    echo "0 results";
}
Run Code Online (Sandbox Code Playgroud)

结论:当您想使用database1use $Db1对象时,如果要使用database2则使用$DB2.


小智 5

为什么需要两个连接?两个数据库的优点/优点实际上主要是性能问题.但如果你在同一台机器上实际上唯一的优势就是更清洁的分离.因此,最好使用一个带有两个不同前缀的DB作为表.因此,您可以通过前缀而不是DB来分隔不同的数据.