2013-03-31 3 views
0

이 클래스를 사용하여 MySql 데이터베이스에 연결하고 사용자를 만들거나 삽입 할 수 있지만 작업 할 때 오류가 발생합니다.PHP : 치명적 오류 : 객체가 아닌 객체에서 query()를 호출하십시오.

내 인증 클래스는 다음과 같습니다

class AuthDB { 
     private $db; 

     public function __construct() { 
      $db = new Dbaccess(); 

    if (!$db->connect (DB_SERVER, DB_USER, DB_PASS, DB_NAME)) { 
    if (mysql_error() == '') 
     $database_incorrect = 'Database name is incorrect or doesn\'t exist'; 
    else 
     $database_incorrect = 'ERROR: '; 
    echo $database_incorrect . mysql_error(); 
    } 
     } 

     public function createUser($email, $password, $salt, $verification) { 

      $ver = 0; 
      $act = 1; 
      $adm = 0; 

      $MYSQLDB = "INSERT INTO tbUsers (email, password, user_salt, is_verified, is_active, is_admin, verification_code) " 
      . "VALUES ('1', '1', '1', '1', '1', '1', '1')"; //test value 

      $r2 = $db->query ($MYSQLDB) or error ('Critical Error', mysql_error()); // <<<LINE 30 ERROR HERE 

      if ($r2 > 0) { 
       return true; 
      } 

      return false; 
     } 
    } 

내 dbaccess를 클래스는 다음과 같습니다

class Dbaccess 
{ 
var $q_array = array(); 
var $db_id; 
var $query; 
var $counter = 0; 
var $timecounter = 0; 
var $query_res; 

function connect ($host, $login, $password, $db) 
{ 
$this->host = $host; 
$this->login = $login; 
$this->password = $password; 
$this->db = $db; 
$this->db_id = @mysql_connect($this->host, $this->login, $this->password); 
if ($this->db_id) 
{ 
$db_select = @mysql_select_db($this->db); 
$this->query("SET NAMES 'UTF8'"); 
if (!$db_select) 
{ 
@mysql_close($this->db_id); 
$this->db_id = $db_select; 
} 
else 
return $this->db_id; 
} 
else 
return false; 
} 
function close() 
{ 
if($this->db_id) 
{ 
if($this->query) 
{ 
@mysql_free_result($this->query); 
} 
$result = @mysql_close($this->db_id); 
return $result; 
} 
else { 
return false; 
}} 
function query ($query) 
    // 
    // $db->query("QUERY"); 

    { 

     unset($this->query_res); 

     if($query != "") 

     { 

      $sql_start = explode(' ', microtime()); 

      $this->query_res = @mysql_query($query, $this->db_id); 

      $sql_stop = explode(' ', microtime()); 
      $sql_time = $sql_stop[0] - $sql_start[0]; 
      $sql_time+= $sql_stop[1] - $sql_start[1]; 

      $this->timecounter+= round($sql_time, 5); 
      $this->counter++; 

     } 

     if($this->query_res) 

     { 
      unset($this->q_array[$this->query_res]); 
      return $this->query_res; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

지금 나는이 오류를 볼 때 송신 데이터 :

Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\test\classes\Auth.php on line 30 

방법이 오류를 해결하기 위해? 내 실수는 어디 갔지?

public function __construct() { 
    $this->db = new Dbaccess(); 

을 그리고 당신은 쿼리 할 때, 당신이 원하는 :

+0

사용자가 mysql_ * 함수를 사용하지 마십시오! 대신 사용자 mysqli_ * 또는 PDO – Cooper

+0

[제발 mysql_ *'함수] (http://stackoverflow.com/q/12859942/1190388)를 새 코드로 사용하지 마십시오. 더 이상 유지 관리되지 않으며 [공식적으로 권장되지 않습니다] (https://wiki.php.net/rfc/mysql_deprecation). 빨간 상자 보이니? 대신 준비된 문에 대해 알아보고 [tag : PDO] 또는 [tag : MySQLi]를 사용하십시오. – hjpotter92

+0

AuthDB 클래스에서 $ db = new Dbaccess();를 바꿉니다. $ this-> db = new Dbaccess(); – Arvind

답변

2

당신은 당신의 __construct이 원하는 그냥 변수 $db를 사용하는 경우

$this->db->query($MYSQLDB); 

, 그것은 단지 그 방법의 범위 내에 존재 . 하지만 클래스 속성을 사용하면 클래스 전체 범위 내에 존재합니다.

관련 문제