PDO::prepare() 是如何生成 PDOStatement 对象的?

How does PDO::prepare() generates a PDOStatement object?

readonly $queryString 属性 是如何通过 PDO::prepare() 执行在 PDOStatement class 中设置的?

鉴于 class 定义,我没有看到任何可以设置该查询的函数。这是否意味着如果 PDOStatement class 不是由 PDO class 实例通过 PDO::prepare() 函数生成的,则不能使用它?

来自manual

Introduction


[The PDOStatement class] Represents a prepared statement and, after the statement is executed, an associated result set.

这看起来必须由 PDO::prepare() 创建。

但这有问题吗?我不能说我遇到过要手动创建 PDOStatement 对象的情况。

PDO 语句是通过 C 代码在内部创建的。当然,C 代码可以直接设置任何属性。

是的,如果 PDOStatement class 不是由 PDO class 实例通过 PDO::prepare()(或 query())生成的,则不能使用 PDOStatement class(用于任何有用的东西)。

但是,您可以使用像这样的代码重新声明并告诉 PDO 使用它而不是标准的

$pdo->setAttribute(PDO::ATTR_STATEMENT_CLASS, ['myPDOStatement', [$pdo]]);