【问题标题】:Clarification on PDOStatement::fetch()澄清 PDOStatement::fetch()
【发布时间】:2012-04-21 18:02:23
【问题描述】:

我注意到PDO::FETCH_INTO 获取模式在PDOStatement::fetch() 中不起作用,但在manual 中它说您可以将PDO::FETCH_INTOPDOStatement::fetch() 一起使用。

我试图这样做: $query->fetch(PDO::FETCH_INTO, $user);

返回:PDOStatement::fetch() expects parameter 2 to be long, object given

这是否意味着该手册有点误导?在这种情况下,使用PDO::FETCH_INTO 的正确方法是什么?

【问题讨论】:

  • 错误信息听起来很不言自明,您使用的功能不正确。查看php.net/manual/en/pdostatement.fetch.php#78794
  • fetch() 属于 PDOStatement 类。我已经编辑了这个问题来解决它,因为我认为这只是一个错字。
  • @ÁlvaroG.Vicario 啊,是的,谢谢。

标签: php pdo


【解决方案1】:

试试这个方法:

$stmt->setFetchMode(PDO::FETCH_INTO, $user);
$user = $stmt->fetch();

更新:

如果您的私有/受保护属性带有公共设置器(推荐)而不是公共属性,请改用 FETCH_CLASS:

class User {
    protected $username;

    public setUsername($username) {
        $this->username = $username;
    }
...
}
...
$stmt->setFetchMode(PDO::FETCH_CLASS, 'User');
$user = $stmt->fetch();

更新 2:

使用 PDO::FETCH_CLASS,您甚至不需要设置器(编辑:不需要用于 PDO 的设置器,这对 id 字段很有用):

class User {
    protected $username;
...
}
...
$stmt->setFetchMode(PDO::FETCH_CLASS, 'User');
$user = $stmt->fetch();

更新 3:在此处查看完整示例:http://pastebin.com/LneAj0xn

【讨论】:

  • 太好了,有点用。现在我收到了cannot access private property。根据这个答案,它应该可以工作:stackoverflow.com/questions/7282962/… 或者答案不正确?
  • 尝试为它试图设置的私有属性定义一个设置器,例如setUsername() 或者,您可以添加一个神奇的 __set() 方法,但我会避免这样做。
  • 更新:在问题中使用了链接的 PDO::FETCH_CLASS 而不是 PDO::FETCH_INTO。如果您在调用之前初始化 $user 对象,它的工作方式可能会有所不同。试试$stmt->setFetchMode(PDO::FETCH_CLASS, 'User');
  • 该问题的标题包括两者,如果您仔细查看该问题,它会提供这两个示例。无论如何,FETCH_CLASS 有效,但它迫使我使用二传手......这比我想要的要多,但无论如何。当您将代码编辑为适当的答案时,我会接受。
  • 一旦您参照将被提取到的对象实例设置了提取模式,您以后不需要覆盖该对象。代替$user = $stmt->fetch(),您可以使用$stmt->fetch()
【解决方案2】:

请注意,PDOStatement::fetch() 的第二个参数是cursor_orientation

你可能想要这样的东西:

$user = $query->fetch(PDO::FETCH_INTO);

【讨论】:

  • 我已经试过了。单独使用 PDO::FETCH_INTO 会给我一个 PDO 异常:No fetch-into object specified
  • 已确认。将对此进行调查,但我不会对它不受支持感到惊讶。
猜你喜欢
  • 1970-01-01
  • 2016-05-30
  • 2014-05-20
  • 2019-11-15
  • 2013-06-05
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多