MySQLi类,未定义变量

时间:2013-01-20 10:22:44

标签: php mysqli

我有一个MySQLi类,但是当我初始化它然后尝试执行查询时,我收到以下错误:

  

注意:未定义的变量:MySQLi in ...

我是mysqli和类的新手

这是我的班级:

<?PHP
    class DB
    {
        private static $instance;
        private $MySQLi;

        private function __construct(array $dbOpt)
        {
            $this->MySQLi = @ new MySQLi($dbOpt['db_host'],$dbOpt['db_user'],$dbOpt['db_pass'],$dbOpt['db_name']);

            if(mysqli_connect_errno()) {
                throw new Exception("Database connection error");   
            }

            $this->MySQLi->set_charset("utf8");
        }

        public static function init(array $dbOpt)
        {
            if(self::$instance instanceof self) {
                return false;   
            } else {
                self::$instance = new self($dbOpt);
            }
        }

        public static function getMySQLiObj() {
            return self::$instance->$MySQLi;    
        }

        public static function query($q) {
/* This is the line that fails */
            return self::$instance->$MySQLi->query($q); 
        }

        public static function escape($str) {
            return self::$instance->$MySQLi->real_escape_string(htmlspecialchars($str));    
        }
    }
?>

这是我的问题:

//Connect to database
DB::init($dbOpt);

$result = DB::query("SELECT * FROM myTable");

if(!$result) {
    echo "MySQLi Query failed"; 
}
else {
//handle query
}

我在上面评论了失败的行。

2 个答案:

答案 0 :(得分:1)

删除$。您的DB::query()方法的代码应如下所示:

return self::$instance->MySQLi->query($q); 

注意,静态变量将以这种方式获得:

Classname::$varname

将按如下方式访问实例var:

$instance = new Classname();
$instance->varname;

答案 1 :(得分:1)

您不需要该行中的&gt; $ MySQLi上的$。

仅在类外的变量上才需要

$。您在代码中的其他几行上也有此错误。