2013-03-16 8 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를 배열 변수가 올바르게 작동하지만 그렇지 않습니다 클래스입니다. 내가 ("내 쿼리 여기") this-> DB-> 쿼리 $를 실행하려고 할 때, 그러나

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

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

, 각 클래스의 __construct 기능에서,이가 (이것은 입력 변수가있는 mysql_query를 반환합니다), 리소스 ID가 아니라 부울 값을 반환합니다 ... 이것은 $ apius가 $ apiauth 뒤에 오므로 클래스가 api 데이터베이스 대신 사용자 데이터베이스로 되돌아 가고 있기 때문입니다.

전혀 이해가되지 않는다면이 문제에 대한 도움을받을 수 있습니다. 감사!

편집 : 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

+0

그냥 게시했습니다. 감사합니다! – nwilging

+0

$ 리소스를 직접 반환하는 것은 좋지 않지만 실제 결과를 반환하는 것이 좋습니다. 어쨌든 FALSE가 반환되면 다음 중 하나를 의미합니다. 1. 쿼리에 오류가 있습니다. 2. db 연결에 오류가 있습니다. 3. 지정된 사용자에게 테이블에 대한 액세스 권한이 없습니다. – kennypu

답변

0

, 나는 $를 실행하려고 this-> DB-> 쿼리 ("여기 내 쿼리"); (이것은 입력 변수가있는 mysql_query를 반환합니다), 리소스 ID가 아니라 부울 값을 반환합니다 ... 이것은 $ apius가 $ apiauth 뒤에 오므로 클래스가 api 데이터베이스 대신 사용자 데이터베이스로 되돌아 가고 있기 때문입니다.

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

@WaleedKahn에서 알 수 있듯이 당신이 정말로 다른 클래스에 DB 인스턴스를 주입해야한다고 말했다 :

개봉 된 여러 DB의를 사용하는 경우는 다음 사용하여 링크 개봉 지정해야합니다. 또한 mysql_* 기능을 사용해야합니다. 대신 Mysqli 또는 PDO을 사용하십시오. 둘 다 이미 객체 지향 인터페이스를 가지고 있습니다.

관련 문제