0

ここに示す OOP スクリプトを変更しようとしました。

2 つのデータベースを同時に処理するには (機能のニーズによって異なります)、まったく機能しないようです。次のエラー メッセージが表示されます。

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);

これは最終的に機能しますか?クエリをはるかに簡単にする単一の関数から呼び出された場合、2 つのデータベースを同時に処理する方法は? 私は何を間違っていますか?

4

3 に答える 3

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");
于 2013-05-17T14:59:05.293 に答える
1

毎回データベースに再接続するのではなく、リンクを保存します。これは 1 つの方法です。

$dbs= array(1=>dbconnect(1), 2=>dbconnect(2));
private function query($usedb,$sql)
{
     global $dbs;
     return mysqli_query($dbs[$usedb], $sql);
}
于 2013-05-17T15:00:57.330 に答える
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);
于 2013-05-17T15:01:42.817 に答える