致命错误:调用成员函数准备非对象

时间:2013-03-11 01:35:27

标签: php

有人可以指出我正确的方向,为什么下面的代码失败了..

MySQLDb.php:

class MySQLDb 
{
        protected $_mysql; 
        protected $_query;


        function __constructor($host,$username,$password,$db)
        {
            $this->_mysql = new mysqli($host,$username,$password,$db) or die('Problem connecting to the DB.');

        }


        function query($query)
        {
            $this->_query =  filter_var($query,FILTER_SANITIZE_STRING);
            $stmt = $this->_prepareQuery();
            $stmt->execute();
            $results = $stmt->_dynamicBindResult($stmt);
        }


 protected function _prepareQuery(){

            $dbh = $this->_mysql;
            if ( !$stmt = $dbh->prepare($this->_query) ) {
                trigger_error('Problem preparing query', E_USER_ERROR);

            }

            return $stmt;
        }

的index.php:

require_once('MYSQLDb.php');

$Db = new MySQLDb('localhost','root','','blog');


$results =$Db->query("SELECT * FROM posts");

当我运行该程序时,它会在fatal error: call to a member function prepare on a non-object

处吐出错误if ( !$stmt = $dbh->prepare($this->_query) ) {

我正在尝试学习以面向对象的方式来做这些事情,所以不太了解如何解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:4)

问题出在你的构造函数中:

function __constructor($host,$username,$password,$db) {

实际的PHP“类构造函数”名称为__construct,而不是__constructor,因此您的版本永远不会被调用,而$this->_mysqlnull(即 - 不是对象)。

尝试将功能更新为以下内容,它应该有效:

function __construct($host,$username,$password,$db) {