Php 关于PDOStatement::fetch()的澄清
我注意到Php 关于PDOStatement::fetch()的澄清,php,pdo,Php,Pdo,我注意到PDO::FETCH_INTOFETCH模式在PDOStatement::FETCH()中不起作用,但在中,它说您可以使用PDO::FETCH_INTO和PDOStatement::FETCH() 我试图做到: $query->fetch(PDO::fetch_到$user) 这将返回:PDOStatement::fetch()期望参数2很长,对象给定 这难道不意味着手册有点误导人吗?在这种情况下,使用PDO::FETCH_的正确方法是什么?请注意,PDOStatement::FETCH
PDO::FETCH_INTO
FETCH模式在PDOStatement::FETCH()
中不起作用,但在中,它说您可以使用PDO::FETCH_INTO
和PDOStatement::FETCH()
我试图做到:
$query->fetch(PDO::fetch_到$user)
这将返回:PDOStatement::fetch()期望参数2很长,对象给定
这难道不意味着手册有点误导人吗?在这种情况下,使用
PDO::FETCH_的正确方法是什么?请注意,PDOStatement::FETCH()的第二个参数是光标方向
你可能想要这样的东西:
$user = $query->fetch(PDO::FETCH_INTO);
试着这样做:
$stmt->setFetchMode(PDO::FETCH_INTO, $user);
$user = $stmt->fetch();
更新:
如果您的私有/受保护属性具有公共setter(建议使用),而不是公共属性,请改用FETCH_类:
class User {
protected $username;
public setUsername($username) {
$this->username = $username;
}
...
}
...
$stmt->setFetchMode(PDO::FETCH_CLASS, 'User');
$user = $stmt->fetch();
更新2:
使用PDO::FETCH_类,您甚至不需要setter(编辑:PDO不需要setter,这对id字段很好):
更新3:请参见此处的完整示例:错误消息听起来很简单,您使用的函数不正确。fetch()属于PDOStatement类。我已经编辑了这个问题来修正它,因为我认为它只是一个打字错误。@alvarog.Vicario啊,是的,谢谢。我已经试过了。单独使用PDO::FETCH_INTO
会给我一个PDO异常:未提取指定的对象
已确认。我将对此进行调查,虽然我不会感到惊讶,因为它只是不受支持。太好了,它可以工作,有点。现在我得到一个无法访问私有财产的。根据这个答案,它应该可以工作:或者答案不正确?尝试为它试图设置的私有属性定义一个setter,例如setUsername(),或者,您可以添加一个magic u set()方法,但我会避免。更新:在问题中,使用了链接的PDO::FETCH_类,而不是PDO::FETCH_。如果在调用之前初始化$user对象,则其工作方式可能会有所不同。尝试$stmt->setFetchMode(PDO::FETCH_类,'User')代码>该问题的标题包括这两个方面,如果仔细查看该问题,它会提供这两个方面作为示例。无论如何,FETCH\u CLASS
可以工作,但它迫使我使用setter。。。这比我希望的要多,但不管怎样。当您将代码编辑为适当的答案时,我将接受。一旦您针对将被提取到的对象实例设置了提取模式,以后就不需要覆盖该对象。您可以使用$stmt->fetch()
,而不是$user=$stmt->fetch()
。
class User {
protected $username;
...
}
...
$stmt->setFetchMode(PDO::FETCH_CLASS, 'User');
$user = $stmt->fetch();