實例:
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()原型:
resource mysql_query ( string $query [, resource $link_identifier ] )
向與指定的鏈接標識符關聯的服務器中的當前活動數據庫發送一條查詢。若是沒有指定 link_identifier,則使用上一個打開的鏈接。若是沒有打開的鏈接,本函數會嘗試無參數調用 mysql_connect() 函數來創建一個鏈接並使用之。查詢結果會被緩存。
在本例中因爲沒有指定link_identifier,因此,在執行第一條sql時,默認使用的是上一個打開的連接,即$conn2,而實際上第一條sql語句應該使用的是$conn1,因此致使報錯,因此爲了可以連接多個mysql數據庫,能夠使用以下方法:
方法1:在mysql_query函數中指定所用鏈接,即:
web
代碼以下:sql
<?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]; ?>