在這段代碼我嘗試extendo PDO錯誤擴展PDO類
class mypdo extends PDO{
static public $db = null;
public function __construct($dsn, $username=false, $password=false){
if(self::$db==null){
try {
self::$db = parent::__construct($dsn, $username, $password);
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("PDO CONNECTION ERROR: " . $e->getMessage() . "<br/>");
}
}
return self::$db;
}
}
當我打電話
$db = new mypdo(<here my DSN>,<here my user>,<here my password>);
我得到這個錯誤
Fatal error: Call to a member function setAttribute() on a non-object
的錯誤是在這一行
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
setAttribute()
是一個PDO對象的方法,爲什麼會出現這個錯誤?
當我加入這個方法的類我PDO
public function lastInsertId($name) {
return self::$db->lastInsertId($name);
}
,如果我嘗試調用它,我得到同樣的錯誤消息
我認爲正確的代碼是
class mypdo extends PDO{
static public $db = null;
public function __construct($dsn, $username=false, $password=false){
if(self::$db==null){
try {
parent::__construct($dsn, $username, $password);
parent::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("PDO CONNECTION ERROR: " . $e->getMessage() . "<br/>");
}
}
return self::$db;
}
public function runSQL($SQL) {
return parent::exec($SQL);
}
public function lastInsertId($name) {
return parent::lastInsertId($name);
}
}
嘗試self :: $ db = new PDO($ dsn,$ username,$ password);而不是self :: $ db = parent :: __構造($ dsn,$ username,$ password); – Bgi