Hey there. I am trying to connect to a DB in a class so I have created this class that opens a new persistent connection if one is not opened already.
private static function connect(){
if(!self::$connection){
try{
self::$connection = new PDO($this->type.':host='.$this->host.';dbname='.$this->name, $this->user, $this->password);
}
catch(\\PDOException $e){
die();
}
}
return self::$connection;
}
but when I try to connect to the database I end up getting a “Access to undeclared static property: Fusion\Core\db::$connection” error.
Can someone point me in the right direction.
Thanks!
Would… you not be wanting to point to $this instead of self:: ?
My understanding (and i’m not an OOP specialist, sadly) is that self:: refers to the class definition, whereas $this refers to the instantiated object of the class…
The PDO documentation seems to indicate you should be able to establish persistance with a setting in the connection attempt…
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));
class Database {
private $_connection;
// Store the single instance.
private static $_instance;
// Get an instance of the Database.
// @return Database:
public static function getInstance() {
if (!self::$_instance) {
self::$_instance = new self();
}
return self::$_instance;
}
// Constructor - Build the PDO Connection:
public function __construct() {
$db_options = array(
PDO::ATTR_EMULATE_PREPARES => false // important! use actual prepared statements (default: emulate prepared statements)
, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION // throw exceptions on errors (default: stay silent)
, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC // fetch associative arrays (default: mixed arrays)
);
$this->_connection = new PDO('mysql:host=localhost;dbname=cms;charset=utf8', 'username', 'password', $db_options);
}
// Empty clone magic method to prevent duplication:
private function __clone() {
}
// Get the PDO connection:
public function getConnection() {
return $this->_connection;
}
}
To connect to the database/table :
$db = Database::getInstance();
$pdo = $db->getConnection();