執行個體:
$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()原型:
resource mysql_query ( string $query [, resource $link_identifier ] )
向與指定的連接配接辨別符關聯的伺服器中的目前活動資料庫發送一條查詢。如果沒有指定 link_identifier,則使用上一個打開的連接配接。如果沒有打開的連接配接,本函數會嘗試無參數調用 mysql_connect() 函數來建立一個連接配接并使用之。查詢結果會被緩存。
在本例中由于沒有指定link_identifier,是以,在執行第一條sql時,預設使用的是上一個打開的連結,即$conn2,而實際上第一條sql語句應該使用的是$conn1,是以導緻報錯,是以為了能夠連結多個mysql資料庫,可以使用如下方法:
方法1:在mysql_query函數中指定所用連接配接,即:
$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的第二個參數,即:
$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];
?>