如何构建PDOStatement类?

时间:2014-05-21 19:46:51

标签: php pdo

我正在写一个PDO扩展。我希望prepare PDO方法不会调用其父级,而是构建自己的PDOStatement

class Foo extends \PDO {
    public function prepare ($statement, $driver_options = []) {
        // return parent::prepare($statement, $driver_options);
        // What does parent::prepare do?
    }
}

似乎PDO prepare方法只构造PDOStatement实例,但是PDOStatement构造函数没有我期望的所有参数(语句本身等)。 / p>

如何在user-land中编写PDO prepare方法?

请注意,我知道PDO::ATTR_STATEMENT_CLASS的存在,并且它可以用于命名要构造的PDOStatement类。我感兴趣的是PDOStatement是否可以在用户土地上构建。

1 个答案:

答案 0 :(得分:3)

您无法直接实例化PDOStatement。它是硬编码的,不允许它。

我在PHP 5.5源代码中找到了这个,在ext / pdo / pdo_stmt.c中:

static PHP_FUNCTION(dbstmt_constructor) /* {{{ */
{
        php_error_docref(NULL TSRMLS_CC, E_ERROR, "You should not create a PDOStatement manually");
}
/* }}} */

您应该通过调用PDO :: query()或PDO :: prepare()来创建PDOStatement。

从您的问题为什么开始,您需要直接实例化PDOStatement。我想你需要重新考虑你的目标。