2015-11-13 81 views
1

我試圖訪問一個代碼中的兩個不同的MySQL數據庫。如何連接到兩個不同的MySQL數據庫

$user = 'root'; 
$password = 'root'; 
$db = 'tag'; 
$host = 'localhost'; 
$port = 8889; 

$link = mysqli_init(); 
$success = mysqli_real_connect(
    $link, 
    $host, 
    $user, 
    $password, 
    $db, 
    $port 
); 

$query = mysqli_query($link,"INSERT INTO lists (name) 
    VALUES('$_POST[newtag]')"); 


mysqli_select_db("following/tagged" , $link); 

$sql = mysqli_query($link,"INSERT INTO list_of_links_tagged (tag_id) 
    VALUES('3')"); 

正如你所看到的,我用mysql_select_db來改變我連接的數據庫。第一個查詢工作正常,但是,第二個查詢不會對數據庫造成任何影響。所以我想知道問題可能是什麼。有任何想法嗎?

+5

根據[documentation](http://php.net/manual/en/mysqli.select-db.php),第一個參數應該是連接,第二個參數應該是新的數據庫;像這樣'mysqli_select_db($ link,「/ following/tagged」);' – Qirel

+1

同樣來自[documentation](http:// php。net/manual/en/mysqli.select-db.php):'成功返回TRUE或失敗時返回FALSE。'... – fvu

回答

-1

如果您使用PHP5(您應該,鑑於PHP4已被棄用),您應該使用PDO,因爲這正在慢慢成爲新的標準。 PDO的一個(非常)重要的好處是它支持綁定參數,這使得代碼更加安全。

您將通過PDO連接,像這樣:

try { 
    $db = new PDO('mysql:dbname=databasename;host=127.0.0.1', 'username', 'password'); 
} catch (PDOException $ex) { 
    echo 'Connection failed: ' . $ex->getMessage(); 
} 

(當然代替數據庫名稱,用戶名及以上的密碼)

然後,您可以查詢這樣的數據庫:

$result = $db->query("select * from tablename"); 
foreach ($result as $row) { 
    echo $row['foo'] . "\n"; 
} 

或者,如果您有變量:

$stmt = $db->prepare("select * from tablename where id = :id"); 
$stmt->execute(array(':id' => 42)); 
$row = $stmt->fetch(); 

如果需要打開多個連接一次,你可以簡單地創建PDO的多個實例:

try { 
    $db1 = new PDO('mysql:dbname=databas1;host=127.0.0.1', 'username', 'password'); 
    $db2 = new PDO('mysql:dbname=databas2;host=127.0.0.1', 'username', 'password'); 
} catch (PDOException $ex) { 
    echo 'Connection failed: ' . $ex->getMessage(); 
} 

OR

您可以多次調用mysql_connect()函數,但如果該參數是相同的您需要爲'$ new_link'(第四個)參數傳遞true,否則將重用相同的連接。例如:

$dbh1 = mysql_connect($hostname, $username, $password); 
$dbh2 = mysql_connect($hostname, $username, $password, true); 

mysql_select_db('database1', $dbh1); 
mysql_select_db('database2', $dbh2); 

然後查詢數據庫1通過第一鏈路標識符:

mysql_query('select * from tablename', $dbh1); 

和數據庫2通過第二:

mysql_query('select * from tablename', $dbh2); 

如果不通過鏈接標識符,則使用所創建的最後一個連接(在本例中,由$ dbh2表示)例如:

mysql_query('select * from tablename'); 
+2

'mysqli_ *'函數與PDO一樣好,除非他數據庫不受'mysqli_ *'函數支持。這不是OP面臨的問題。 'mysqli_ *'也支持準備好的語句,即使是程序式的。 – Qirel

+0

@Qirel true .... – Jah

+2

並不是說人們可以通過糾正一個錯誤來糾正他們有問題時可能有點笨拙的PDO。 – fvu

1

如果兩個數據庫位於MySQL的同一實例/服務器上,那麼實際上可以在不使用mysqli_select_db()函數的情況下更改數據庫。

只需在數據庫名稱前添加表名。

如:

SELECT col1 FROM `your_db_name`.`your_table_name` 

你甚至可以連接兩個表一起跨數據庫,如果你想,只要你爲每個表指定數據庫名稱。

相關問題