Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

PHP

pdo fatal error - call to member function prepare() on null in C:\xampp\htdocs\folder1\folder2\

I tried testing my class on creating a table within a database but it throws a fatal error: Fatal error: Call to a member function prepare() on null in C:\xampp\htdocs\unania\new_look\php-pdo-wrapper-class

\class.db.php on line 37

The class codes are; <?php

class Database{
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;

private $dbh;
private $error;

private $stmt;


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_EXCEPTION,
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET utf8");

    try {
    $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
    } catch (PDOException $e) {
    $this->error = $e->getMessage();
    }
}

public function query($query)
{
    $this->stmt = $this->dbh->prepare($query);

}

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);
}

public function execute(){
    return $this->stmt->execute();
}

public function resultset(){
    $this->execute();
    return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}

public function single(){
    $this->execute();
    return $this->stmt->fetch(PDO::FETCH_ASSOC);
}

public function rowCount(){
    return $this->stmt->rowCount();
}

public function lastInsertId(){
    return $this->dbh->lastInsertId();
}

public function beginTransaction(){
    return $this->dbh->beginTransaction();
}

public function endTransaction(){
    return $this->dbh->commit();
}

public function cancelTransaction(){
    return $this->dbh->rollBack();
}

public function debugDumpParams(){
    return $this->stmt->debugDumpParams();
}



}

?>

while the page that calls the class is as shown below; <?php include("class.db.php"); // Define configuration define("DB_HOST", "localhost"); define("DB_USER", "user"); define("DB_PASS", "password"); define("DB_NAME", "class");

// Instantiate database.
$database = new Database();

$stmt= $database->query("CREATE TABLE mytable (
ID int(11) NOT NULL AUTO_INCREMENT,
FName varchar(50) NOT NULL,
LName varchar(50) NOT NULL,
Age int(11) NOT NULL,
Gender enum('male','female') NOT NULL,
PRIMARY KEY (ID)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ");
$sql = $database->prepare($stmt);


$database->query('INSERT INTO mytable (FName, LName, Age, Gender) VALUES (:fname, :lname, :age, :gender)');

$database->bind(':fname', 'John');
$database->bind(':lname', 'Smith');
$database->bind(':age', '24');
$database->bind(':gender', 'male');

$database->execute();

echo $database->lastInsertId();

?>

Please I have been looking for a solution on this and so far, I don't understand why the error is coming up and how to

resolve is missing from my knowledge-base. I know php, but just started learning oop a few days back. I need to be able to

use this type of programming method to stop sql injection and most hacking abilities before I move on to finish up the

application am building. Please an urgent help will be well appreciated.