我正在使用数据库对象来运行预准备语句,但收到此错误:
Fatal error: Call to a member function prepare() on null in /var/www/html/rsvp/lib/classes.php on line 43
我正在使用的数据库对象(这只是其中的一部分,但包括所有相关方法):
class DatabaseConnection {
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
protected $dbConnect;
private $stmt = NULL;
private $result;
public function __construct() {
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
// Set options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
PDO::ATTR_EMULATE_PREPARES => false
);
// Create a new PDO instanace
try{
$this->dbConnect = new PDO($dsn, $this->user, $this->pass, $options);
}
// Catch any errors
catch(PDOException $e) {
$this->error = $e->getMessage();
}
}
//Prepare statement
public function preparedQuery($query) {
//Unset previous stmt
unset($this->stmt);
//Set up new prepared statment
$this->stmt = $this->dbConnect->prepare($query);
}
//Bind paramaters
public function bind($param, $value, $type = null) {
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($param, $value, $type);
}
//Execute statement
public function execute() {
return $this->stmt->execute();
}
我用来运行查询的方法是:
class SMS extends DatabaseConnection {
public function __construct() {
}
public function createSMSSession($phoneNumber) {
//Add to sms table
$this->preparedQuery("INSERT INTO sms (phone_number, step) VALUES (:phonenumber, :step)");
$this->bind(':phonenumber', $phoneNumber);
$this->bind(':step', 1);
$this->execute();
}
}
最后,我用来调用方法的代码:
require_once('lib/config.php');
require_once('lib/classes.php');
// Sender's phone numer
$from_number = $_REQUEST['From'];
// Receiver's phone number - Plivo number
$to_number = $_REQUEST["To"];
// The SMS text message which was received
$text = $_REQUEST["Text"];
$sms = new SMS();
$sms->createSMSSession($from_number);
数据库凭据在config.php文件中定义。我已经确认一切都是正确的。我有多个方法使用相同的Database对象,没有错误。
答案 0 :(得分:0)
如果您没有在那里做任何事情,请删除整个SMS::__constuct
声明。除非它调用DatabaseConnection::__construct
函数,否则您将无法使用PDO句柄。