2013-03-31 50 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 

如何解决这个问题?我的错误在哪里?

+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想这样的:

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

当你查询,你想:

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

当你只需要使用变量$db,它只有方法的范围内,存在。但是,当您使用类属性时,它存在于整个类的范围内。

相关问题