致命错误:即使在对象中,也不在对象上下文中时使用$ this

时间:2013-09-28 22:22:36

标签: php class mysqli

调用我的数据库类并运行查询函数时,我收到此错误。

这是我的班级:

class dbConnect {

public $mysqli = null;

public function __construct() {
    $this->mysqli = new mysqli( "localhost", "root", "pass", "database" );
    if ($this->mysqli->connect_errno) 
    {
        echo "Error MySQLi: ("&nbsp. $this->mysqli->connect_errno 
        . ") " . $this->mysqli->connect_error;
        exit();
    }
    $this->mysqli->set_charset("utf8"); 
}

public function __destruct() {
    $this->closeDB();
}

public function runQuery($qry) {
    $result = $this->mysqli->query($qry);
    return $result;
}

这是我的页面:

$db = new dbConnect();
$insert = "INSERT INTO `users` (`username`,`password`,`email`,`ip`,`date`) VALUES ('$username','$pw','$email','$ip','$time')";

$db->runQuery( $insert ) or die("Error MySQLi: ("&nbsp. $db->mysqli->connect_errno . ") " . $db->mysqli->connect_error);

编辑:

我现在收到错误Dbr`0

4 个答案:

答案 0 :(得分:1)

在骰子的最后一行,你不在对象中。

答案 1 :(得分:1)

改变这个:

$db->runQuery( $insert ) or die("Error MySQLi: ("&nbsp. $this->mysqli->connect_errno . ") " . $this->mysqli->connect_error);

对此:

$db->runQuery( $insert ) or die("Error MySQLi: ("&nbsp. $db->mysqli->connect_errno . ") " . $db->mysqli->connect_error);

但是,我建议您创建一个方法来获取错误,而不是直接访问数据库对象($db->mysqli)。

答案 2 :(得分:0)

在您的or die声明中,您忘记了$this,请将其替换为$db

答案 3 :(得分:0)

我没有在你的类中看到你在__destruct()函数中调用它的任何closeDB函数,如下所示:$this->closeDB(); 也可以在查询中用$this->mysqli->connect_errno替换$db->mysqli->connect_errno