扩展 PDO 语句类

2022-08-30 21:06:04

是否可以扩展 PHP PDO 语句类以向其添加自定义方法?这与扩展基本 PDO 类不同。如果是这样,那么如何去做,因为语句类仅在通过PDO类运行查询时才返回?


答案 1

您可以使用 PDO::setAttribute() 设置该类:

PDO::ATTR_STATEMENT_CLASS:设置从 PDOStatement 派生的用户提供的语句类。不能与持久性 PDO 实例一起使用。需要数组(字符串类名,数组(混合constructor_args))。

例:

$pdo->setAttribute(PDO::ATTR_STATEMENT_CLASS, [Custom::class]);

答案 2

这是由用户在PDO下的PHP手册中回答的:

class Database extends PDO {
    function __construct($dsn, $username="", $password="", $driver_options=array()) {
        parent::__construct($dsn,$username,$password, $driver_options);
        $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('DBStatement', array($this)));
    }
}
class DBStatement extends PDOStatement {
    public $dbh;
    protected function __construct($dbh) {
        $this->dbh = $dbh;
    }
}

您可以通过在此页面上搜索“smileaf”找到他的原始答案:https://php.net/manual/en/book.pdo.php


推荐