【问题标题】:How does PDO::prepare() generates a PDOStatement object?PDO::prepare() 如何生成 PDOStatement 对象?
【发布时间】:2015-09-12 20:16:32
【问题描述】:

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

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

【问题讨论】:

  • 它不需要暴露任何setter方法。 PDOStatement 在内部被实例化和填充 PDO。虽然您可以手动创建一个,但它不会连接到任何东西或无法使用。

标签: php mysql pdo prepare pdostatement


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    来自manual

    简介


    [PDOStatement 类] 表示一个准备好的语句,并且在执行该语句后,一个关联的结果集。

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

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

    【讨论】:

    • 这根本不是问题。我只是对对象创建流程感到好奇,而没有公开设置查询字符串以创建 PDOStatement 对象的函数。我也不必手动创建 PDOStatement 对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2015-01-22
    • 2015-04-29
    • 2014-09-11
    相关资源
    最近更新 更多