gpt4 book ai didi

PHP:使用一个类来建立和返回一个PDO句柄

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:21 25 4
gpt4 key购买 nike

为了避免另一个弃用问题,我想使用一个类连接到我的数据库并让该类返回数据库句柄,以便于使用。

更具体一点,我想上一个类,以便:

  • 立即连接到数据库。
  • 根据情况以管理员或只读访问权限连接。
  • 通过使用这个类让$db变成$dbh
  • 因此,$db 成为一个打开的 PDO 连接(数据库句柄)- 这样我就可以执行 $db->query...等。因此“返回 $this->dbh;”

我试过这种方法,但有些东西不起作用:

<?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";
}

我收到以下错误:

Fatal error: Call to undefined method database::getAttribute() in...

最佳答案

getAttribute 函数是 PDO 类上的一个方法。您的 db 类没有实现它。

您要么必须编写调用内部 PDO 类的 getAttribute 函数,要么扩展 PDO。

function getAttribute( $attribute ) {
return $this->dbh->getAttribute( $attribute );
}

关于PHP:使用一个类来建立和返回一个PDO句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19200806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com