有人可以指出我正确的方向,为什么下面的代码失败了..
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) ) {
我正在尝试学习以面向对象的方式来做这些事情,所以不太了解如何解决这个问题。
感谢。
答案 0 :(得分:4)
问题出在你的构造函数中:
function __constructor($host,$username,$password,$db) {
实际的PHP“类构造函数”名称为__construct
,而不是__constructor
,因此您的版本永远不会被调用,而$this->_mysql
是null
(即 - 不是对象)。
尝试将功能更新为以下内容,它应该有效:
function __construct($host,$username,$password,$db) {