1. 程式人生 > >PHP同時連線多個mysql資料庫

PHP同時連線多個mysql資料庫

例項:

<?php
$conn1 = mysql_connect("127.0.0.1", "root","root","db1");
mysql_select_db("db1", $conn1);
$conn2 = mysql_connect("127.0.0.1", "root","root","db2");
mysql_select_db("db2", $conn2);

$sql = "select * from ip";
$query = mysql_query($sql);
if($row = mysql_fetch_array($query))
	echo $row[0]."\n";

$sql = "select * from web ";
$query = mysql_query($sql);
if($row = mysql_fetch_array($query))
	echo $row[0];
?>
這段程式碼存在問題,在程式執行時會報錯:PHP Warning:  mysql_fetch_array() expects parameter 1 to be resource, boolean given in ....

原因分析:

程式開始建立兩個資料庫連結,函式mysql_query()原型:

resourcemysql_query(string$query[,resource$link_identifier] )

向與指定的連線識別符號關聯的伺服器中的當前活動資料庫傳送一條查詢。如果沒有指定 link_identifier,則使用上一個開啟的連線。如果沒有開啟的連線,本函式會嘗試無引數呼叫 mysql_connect() 函式來建立一個連線並使用之。查詢結果會被快取。

在本例中由於沒有指定link_identifier,所以,在執行第一條sql時,預設使用的是上一個開啟的連結,即$conn2,而實際上第一條sql語句應該使用的是$conn1,所以導致報錯,所以為了能夠連結多個mysql資料庫,可以使用如下方法:

方法1:在mysql_query函式中指定所用連線,即: 

<?php
$conn1 = mysql_connect("127.0.0.1", "root","root","db1");
mysql_select_db("Muma", $conn1);
$conn2 = mysql_connect("127.0.0.1", "root","root","db2");
mysql_select_db("product", $conn2);

$sql = "select * from ip";
$query = mysql_query($sql,$conn1); //新增連線$conn1
if($row = mysql_fetch_array($query))
	echo $row[0]."\n";
	
$sql = "select * from web ";
$query = mysql_query($sql, $conn2);
if($row = mysql_fetch_array($query))
	echo $row[0];
?>
方法2:在sql語句中關聯所用資料庫,此時可以省略mysql_query的第二個引數,即:
<?php
$conn1 = mysql_connect("127.0.0.1", "root","root","db1");
mysql_select_db("db1", $conn1);
$conn2 = mysql_connect("127.0.0.1", "root","root","db2");
mysql_select_db("db2", $conn2);

$sql = "select * from db1.ip";  //關聯資料庫
$query = mysql_query($sql);
if($row = mysql_fetch_array($query))
	echo $row[0]."\n";

$sql = "select * from db2.web ";
$query = mysql_query($sql);
if($row = mysql_fetch_array($query))
	echo $row[0];
?>
本文為Eliot原創,轉載請註明出處:http://blog.csdn.net/xyw_blog/article/details/15115155