I am writing a web application to use CRUD (Create, Retrieve, Update and Delete) methods in a class to reduce code redundancy. When I try to run the invoking code I keep getting a fatal error that my $res
is a non-object. Why is my $res
not being picked up as a valid object?
Invoking Code
$db = Database::getInstance($username, $password);
$exists = $db->tableExists($dbname, $tablename);
echo ($exists)? "TRUE" : "FALSE";
Database Class
class Database
{
private static $instance;
private $dbh;
private static $dbengine = 'mysql';
private static $dbname = 'database';
private static $dbhost = 'localhost';
function __construct($username, $password)
{
$dbname = Database::$dbname;
$dbhost = Database::$dbhost;
$dbengine = Database::$dbengine;
$this->dbh = new PDO("$dbengine:host=$dbhost;dbname=$dbname", $username, $password);
}
public static function getInstance($username, $password)
{
if (!isset(self::$instance))
{
$object = __CLASS__;
self::$instance = new $object($username, $password);
}
return self::$instance;
}
public function tableExists($table)
{
$dbname = self::$dbname;
$sql = $this->dbh->prepare("SHOW TABLES FROM :dbname like :table");
$sql->bindParam(':dbname' , $dbname);
$sql->bindParam( ':table', $table);
$res = $sql->execute();
$rows = $res->fetch(PDO::FETCH_NUM);
if ($rows)
{
if ($rows[0] == 1)
{
return TRUE;
}
return FALSE;
}
return FALSE;
}
}
Code Modified from the Following Link
http://code.tutsplus.com/tutorials/real-world-oop-with-php-and-mysql--net-1918
When I run the Invoking Code I get:
Fatal error: Call to a member function fetch() on a non-object