我做了相当多的研究、故障排除和搜索,试图解决我的问题,但没有运气。所以这里是错误...
在非对象上调用成员函数 prepare()
生成此错误的代码在我的用户身份验证类中,如下所示...
$this->dbManager->db->prepare('INSERT INTO users (email, password, user_salt, is_admin) VALUES (:email, :password, :user_salt, :is_admin)');
dbManager 来自 $db ,我已将其传递到我的类的 __construct 中,如下所示...
public function __construct($db) {
$this->siteKey = 'notImportant';
$this->dbManager = $db;
}
$db 源自我的 sql 类,我在 index.php 所需的一个“引导”php 文件中需要它。
bootstrap.php 代码如下...
<?php
// Load firePHP library
//require_once('FirePHPCore/FirePHP.class.php');
ob_start();
//$firephp = FirePHP::getInstance(true);
// Load all the classes/libs...
require_once 'classes/sql.class.php';
require_once 'classes/auth.class.php';
$db = sql::getInstance();
session_start();
$auth = new Auth($db);
require_once 'lib/handlepost.php';
最后,我的 sql.class.php 代码如下...
class sql {
public static $db = false;
private $database_host = '';
private $database_user = '';
private $database_pass = '';
private $database_db = '';
private function __construct() {
if (self::$db === false) {
$this -> connect();
}
return self::$db;
}
public static function getInstance() {
if (!self::$db) {
self::$db = new sql();
}
return self::$db;
}
private function connect() {
$dsn = $this -> database_type . ":dbname=" . $this -> database_db . ";host=" . $this -> database_host;
try {
self::$db = new PDO($dsn, $this -> database_user, $this -> database_pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
self::$db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
//print_r($e->errorInfo);
//echo 'Connection failed: ' . $e->getMessage();
}
} // End Connect
}
我是使用 PDO 的新手,这让我开始有些困惑......
任何帮助解释我做错了什么都将不胜感激。