setAttribute(PDO::ATTR_STATEMENT_CLASS, array('MyStatement', array($this))); } public function exec() { $args = func_get_args(); echo 'hi'; call_user_func_array(array($this, 'parent::exec'), $args); $this->history[] = func_get_args(); } public function query() { echo 'moo'; $args = func_get_args(); call_user_func_array(array($this, 'parent::query'), $args); $this->history[] = $args; } } class MyStatement extends PDOStatement { private $pdo; private function __construct($pdo) { $this->pdo = $pdo; } public function execute() { $args = func_get_args(); call_user_func_array(array($this, 'parent::execute'), $args); $this->pdo->history[] = $this->queryString; } public function query() { $args = func_get_args(); call_user_func_array(array($this, 'parent::query'), $args); $this->pdo->history[] = $this->queryString; } } $db = new MyPDO('mysql:host=localhost;dbname=test', 'mysql', 'elssur'); $smt = $db->prepare("SELECT * FROM user WHERE userid = :hi"); $smt->bindValue('hi', null); // echo $smt; // $smt->execute(array(1)); $smt->execute(); print_r($smt->fetch()); print_r($db->history); ?>