Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 关于PDOStatement::fetch()的澄清_Php_Pdo - Fatal编程技术网

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