8

我试图弄清楚如何从 PDO 获取到我的自定义类,以及通常的 PDO-to-object API,并且发现缺乏体面的文档令人沮丧。大多数选项仅记录为选项,而示例都使用提取到数组中。
那么,有人可以解释如何使用这些:

  • PDO::FETCH_OBJ
  • PDO::FETCH_CLASS
  • PDO::FETCH_CLASSTYPE
  • PDO::FETCH_INTO
  • PDO::FETCH_LAZY
  • PDOStatement::fetch
  • PDOStatement::fetchObject
  • PDOStatement::setFetchMode

如果可能的话,我想大致解释一下每个函数/常量如何用于获取对象,或者有什么区别,以及如何获取我的类的具体答案,例如:

class MyRow {
  public $col1, $col2;
}
4

2 回答 2

11

这是我设法弄清楚的:

常数

  • PDO::FETCH_OBJ
    用于获取未命名(“匿名”)对象的新实例

  • PDO::FETCH_CLASS
    用于获取现有类的新实例(列名应与现有属性匹配,或__set应用于接受所有属性)。设置属性后将调用类的构造函数。

  • PDO::FETCH_CLASSTYPE
    FETCH_CLASS(按位或)一起使用,要创建其实例的类的名称在第一列中,而不是提供给函数。

  • PDO::FETCH_INTO
    与相同类型的类一起使用FETCH_CLASS(必须将所有列作为属性名称处理),但更新现有对象而不是创建新对象。

  • PDO::FETCH_LAZY
    我不知道这是做什么的。

功能

  • PDOStatement::fetch
    常规的 get-a-row 命令。我不知道如何使用它,FETCH_CLASS或者FETCH_INTO因为没有任何方法可以传递类名/实例。

  • PDOStatement::fetchObject
    一种做FETCH_CLASSor的方法FETCH_INTO,包括传递构造函数参数。没有 args 是FETCH_OBJ.

  • PDOStatement::setFetchMode
    一种设置默认获取模式的方法,因此PDOStatment::fetch可以在没有 args 的情况下调用。


这是我设法弄清楚的最好的。我希望它可以帮助别人(我需要的fetchObject方法)

于 2012-10-14T13:34:31.517 回答
1

准备好语句后,将 PDOStatement::setFetchMode 与 PDO::FETCH_CLASS 一起使用:

$stmt = $pdo->query('SELECT col1, col2 FROM table');
$stmt->setFetchMode(\PDO::FETCH_CLASS, 'MyRow');
$obj = $stmt->fetch();
于 2012-10-14T12:01:36.983 回答