I am using a database object to run a prepared statement but getting this error:
Fatal error: Call to a member function prepare() on null in /var/www/html/rsvp/lib/classes.php on line 43
The database object I am using is (this is only part of it, but includes all relevant methods):
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();
}
And the method I'm using to run the query is:
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();
}
}
And, finally, the code I'm using to call the method:
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);
The database credentials are defined in the config.php file. I have verified that everything is correct on that end. I have multiple methods using the same Database object with no error.