[英]PHP: use a class to establish and return a PDO handle
为避免另一个弃用问题,我想使用一个类连接到我的数据库,并让该类返回数据库句柄,以便于使用。
为了更具体一点,我想要一个类以便:
我尝试了这种方法,但是没有任何效果:
<?php
class database {
private $dbh;
public function __construct($type=null) {
switch ($type) {
case 0:
self::ro();
break;
case 1:
self::admin();
break;
default:
self::ro();
break;
}
return $this->dbh;
}
private function ro() {
try {
# MySQL with PDO_MYSQL (Read-only access)
$dbhost = 'localhost';
$dbname = 'dbname';
$dbuser = 'dbuser';
$dbpass = 'dbpass';
$this->dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
private function admin() {
try {
# MySQL with PDO_MYSQL
$dbhost = 'localhost ';
$dbname = 'dbname';
$dbuser = 'dbadminuser';
$dbpass = 'dbadminpass';
$this->dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
}
$db = new database();
//test connection
$attributes = array(
"AUTOCOMMIT", "ERRMODE", "CASE", "CLIENT_VERSION", "CONNECTION_STATUS",
"ORACLE_NULLS", "PERSISTENT", "PREFETCH", "SERVER_INFO", "SERVER_VERSION",
"TIMEOUT"
);
foreach ($attributes as $val) {
echo "PDO::ATTR_$val: ";
echo $db->getAttribute(constant("PDO::ATTR_$val")) . "<br>\n";
}
我收到以下错误:
致命错误:在...中调用未定义的方法database :: getAttribute()
getAttribute
函数是PDO类上的方法。 您的db
类没有实现它。
您要么必须编写调用内部PDO类的getAttribute
函数,要么扩展PDO。
function getAttribute( $attribute ) {
return $this->dbh->getAttribute( $attribute );
}
看来您的需求集中在以某种方式创建和配置对象,而不是增强其功能。 在这种情况下,创建pdo实例并返回它的简单函数就足够了。 但是,它更正式地称为工厂模式。
这是使用静态类的示例。
class MyDatabaseFactory {
public static function create($type=null) {
switch ($type) {
case 0:
return self::ro();
break;
case 1:
return self::admin();
break;
default:
return self::ro();
break;
}
}
private static function ro() {
try {
# MySQL with PDO_MYSQL (Read-only access)
$dbhost = 'localhost';
$dbname = 'dbname';
$dbuser = 'dbuser';
$dbpass = 'dbpass';
return new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
private static function admin() {
try {
# MySQL with PDO_MYSQL
$dbhost = 'localhost ';
$dbname = 'dbname';
$dbuser = 'dbadminuser';
$dbpass = 'dbadminpass';
return new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
}
然后
$db = MyDatabaseFactory::create(0);
$db->getAttribute(...);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.