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]]);
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]]);