Как в PHP установить класс выборки PDO по умолчанию?

Используя PDO :: setAttribute , как мне указать имя класса при установке PDO :: ATTR_DEFAULT_FETCH_MODE до PDO :: FETCH_CLASS .

Это код, который я использую .. Я хотел бы установить его так, чтобы все мои строки возвращались как экземпляр DB_Row :

class DB_Row extends ArrayObject {}

$db = new PDO('mysql:dbname=example;host=localhost', 'user', 'pass');
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_CLASS);

$stmt = $db->query("SELECT * FROM `table` WHERE `id` = 1;");

$row = $stmt->fetch(); // I want a DB_Row by default!

Приведенный выше код приводит к исключению PDOException , поскольку имя класса DB_Row не было назначено.

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General    error: No fetch class specified

Как мне это сделать?

Заранее спасибо ..

РЕШЕНИЕ: Я использовал ответ fireeyedboy . В моей ситуации это сработало лучше всего, так как я уже расширял PDOStatement для ведения журнала ...

class DB extends PDO {
    public function __construct($host = null, $user = null, $pass = null, $db = null) {
        try {
            parent::__construct('mysql:dbname=' . $name .';host=' . $host, $user, $pass);
            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_CLASS);
            $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('DB_Query', array('DB_Row')));
        } catch (PDOException $e) {
            die('Database Error');
        }
    }
}

class DB_Query extends PDOStatement {
    private $class;
    protected function __construct ($class = 'DB_Row') {
        $this->class = $class;
        $this->setFetchMode(PDO::FETCH_CLASS, $this->class);
    }
}

class DB_Row extends ArrayObject {
    public function __set($name, $val) {
        $this[$name] = $val;
    }
    public function __get($name) {
        return $this[$name];
    }
}

6
задан McHerbie 3 October 2011 в 17:16
поделиться