0

我试图更改此处提供的 OOP 脚本:

一次处理两个数据库(取决于功能需要),但它似乎根本不起作用。我收到一条错误消息:mysqli_query() 需要至少 2 个参数,1 个在第 60 行的 ...DAL.php 中给出

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

这最终能奏效吗?如果从使查询更容易的单个函数调用,如何一次处理两个数据库?我做错了什么?

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

您不会每次都重新连接到数据库,而是保存链接。这是一种方法。

$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 回答