1

我正在尝试运行一个可以联系多个数据库的数据库类。我的设置是这样的:

$auth = new Auth($db['host'], $db['user'], $db['name']['api'], $db['pass']['api']);
$apiuser = new APIUser($db['host'], $db['user'], $db['name']['users'], $db['pass']['users']);

所有这些 $db 数组变量都可以正常工作,但不能正常工作的是类。在每个类的 __construct 函数中,我有这个:

function __construct($dbh, $dbu, $dbn, $dbp) {

        $this->db = new DB($dbh, $dbu, $dbn, $dbp);
    }

但是,当我尝试运行 $this->db->query("my query here"); (它包含一个带有输入变量的简单返回 mysql_query),它返回一个布尔值而不是资源 ID...这是因为该类正在恢复到用户数据库而不是 api 数据库,因为 $apiuser 在 $apiauth 之后......

如果这有任何意义,我真的可以在这方面提供一些帮助!谢谢!

编辑:部分 DB 类给出错误:

function __construct($host, $user, $name, $pass) {
        $this->error = new Error();
        if(!mysql_connect($host, $user, $pass)) {
            $this->error->db_connect_error($host, $user, $pass);
        }
        if(!mysql_select_db($name)) {
            $this->error->db_select_error($name);
        }
    }
    function query($input) {
        return mysql_query($input);
    }
4

1 回答 1

0

但是,当我尝试运行 $this->db->query("my query here"); (它包含一个带有输入变量的简单返回 mysql_query),它返回一个布尔值而不是资源 ID...这是因为该类正在恢复到用户数据库而不是 api 数据库,因为 $apiuser 在 $apiauth 之后......

如果您使用多个数据库,那么您需要指定您使用的链接:

class DB {
   private $dbRsrc;

   function __construct($host, $user, $name, $pass) {
        $this->error = new Error();
        $this->dbRsrc = mysql_connect($host, $user, $pass);
        if(!$this->dbRsrc) {
            $this->error->db_connect_error($host, $user, $pass);
        }
        if(!mysql_select_db($name)) {
            $this->error->db_select_error($name);
        }
    }
    function query($input) {
        return mysql_query($input, $this->dbRsrc);
    }
}

也就是说,您应该DB像@WaleedKahn 建议的那样将实例真正注入其他类。此外,您不应该使用这些mysql_*功能。使用MysqliPDO代替。两者都已经有了面向对象的接口。

于 2013-03-16T03:19:29.690 回答