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)
您可以通过遵循面向对象的方法来实现
首先创建与两个数据库的连接:
$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)
结论:当您想使用database1
use $Db1
对象时,如果要使用database2
则使用$DB2
.
小智 5
为什么需要两个连接?两个数据库的优点/优点实际上主要是性能问题.但如果你在同一台机器上实际上唯一的优势就是更清洁的分离.因此,最好使用一个带有两个不同前缀的DB作为表.因此,您可以通过前缀而不是DB来分隔不同的数据.
归档时间: |
|
查看次数: |
2579 次 |
最近记录: |