2013-05-17 123 views
0

我試圖改變這裏OOP腳本介紹:2 mysqli的連接同時

在一次處理兩個數據庫(根據功能需要),但似乎沒有在所有的工作。我得到一個錯誤信息: mysqli_query()預計至少2個參數,1 ... DAL.php給出上線60

private function dbconnect($usedb) 
{ 
    switch($usedb) 
    { 
     case '': 
     echo "Error choosing database to operate on."; 
     break; 
     case '1': 
     $conn = new mysqli(DB1_HOST, DB1_USER, DB1_PASSWORD,DB1_DB) or die ("<br>Could not connect to MySQL server"); 
     //mysqli_select_db(DB1_DB,$conn) or die ("<br>Could not select the main database."); 
     return $conn; 
     break; 
     case '2': 
     $conn = new mysqli(DB2_HOST, DB2_USER, DB2_PASSWORD,DB2_DB) or die ("<br>Could not connect to MySQL server"); 
     //mysqli_select_db(DB2_DB,$conn) or die ("<br>Could not select the client database."); 
     return $conn; 
     break; 
    } 
} 

private function query($usedb,$sql) 
{ 
    $this->dbconnect($usedb); 
    $res = mysqli_query($sql); 
能否這項工作最終

?如果從一個正在進行查詢的單一函數中調用,如何同時處理兩個數據庫?我做錯了什麼?

+0

錯誤消息是什麼意思?你看過文檔,看看mysqli_query需要什麼參數嗎? – andrewsi

+0

'mysqli_query'第一個參數應該是一個'mysqli'實例。 –

+0

只需將'$ usedb'添加到'mysqli_query'像這樣,'mysqli_query($ userdb,$ sql)' –

回答

1

這段代碼:

private function query($usedb,$sql) 
{ 
$this->dbconnect($usedb); 
$res = mysqli_query($sql); 

應該是這樣的:

private function query($usedb,$sql) 
{ 
$conn = $this->dbconnect($usedb); 
$res = mysqli_query($conn,$sql); 

mysqli_close($conn); //dont forget to close it 

而且在你DBCONNECT功能,你應該使用程序風格:

return $link = mysqli_connect("localhost", "my_user", "my_password", "world"); 
+0

那麼,最糟糕的問題是,即使現在,我也會得到如下錯誤: 「mysqli_select_db ()期望參數1爲mysqli,給出的字符串爲「 與第一個數據庫名稱相同的常量可以是一個字符串嗎?我應該將其轉換爲對象嗎? – jakubplus

+0

你是否在使用yur函數和外部程序風格的對象風格....你改變你的代碼就像我的回答中發佈的返回$ link y? – Hackerman

+0

羅伯特羅扎斯,你幾乎和你的答案一模一樣。這完全適用於我: 私人函數查詢($ usedb,$ sql) { $ conn = $ this-> dbconnect($ usedb); $ res = $ conn-> query($ sql); – jakubplus

1

你不重新連接到數據庫每次,您保存鏈接。這是做到這一點的一種方法。

$dbs= array(1=>dbconnect(1), 2=>dbconnect(2)); 
private function query($usedb,$sql) 
{ 
    global $dbs; 
    return mysqli_query($dbs[$usedb], $sql); 
} 
0

當你在程序上使用這樣的:

$res = mysqli_query($sql); 

該公司預計:(SRC:http://php.net/manual/en/mysqli.query.php

mixed mysqli_query (mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ]) 

所以,你錯過了第一個參數。

由於您正在返回對象。我會將您的私人功能「查詢」更改爲:

$mysql = $this->dbconnect($usedb); 
$res = $mysql->query($sql);