2013-03-16 78 views
1

我试图运行一个可以联系多个数据库的数据库类。我有这样设置:PHP多次使用多个变量初始化一个类

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

然而,当我尝试运行$这个 - > DB->查询(“我在这里查询”); (它包含一个带输入变量的简单返回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); 
    } 
+0

很高兴看到DB类以及 – kennypu 2013-03-16 03:05:21

+0

刚刚发布它,谢谢! – nwilging 2013-03-16 03:07:24

+0

我想说这是一种糟糕的做法直接返回$资源,它可能会更好地返回实际结果。无论如何,如果它返回FALSE,这意味着:1.你的查询有错误2.数据库连接有错误3.给定的用户没有权限访问表。 – kennypu 2013-03-16 03:10:32

回答

0

然而,当我尝试运行$这个 - > DB->查询( “我在这里查询”); (它包含一个带输入变量的简单返回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。两者都有一个面向对象的接口。