我正在写一个pdo扩展。我希望preparePDO方法不要调用它的父对象,而是构建它自己的PDOStatement

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

pdoprepare方法似乎只是构造PDOStatement实例,但是PDOStatement构造函数没有我期望的所有参数(语句本身等)。
如何在用户端编写pdoprepare方法?
注意,我知道存在PDO::ATTR_STATEMENT_CLASS并且可以使用它来命名要构造的PDOStatement类。我感兴趣的是PDOStatement能否在用户土地上建造。

最佳答案

不能直接实例化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()来创建pdo语句。
从您的问题中不清楚为什么需要直接实例化pdo语句。我认为你需要重新考虑你的目标。

09-18 09:33