php - PDO 的 FETCH_INTO $这个类不起作用

标签 php pdo

我想使用 PDO 的 FETCH_INTO 构造函数来填充类:

class user
{
    private $db;
    private $name;

    function __construct($id)
    {
        $this->db = ...;

        $q = $this->db->prepare("SELECT name FROM users WHERE id = ?");
        $q->setFetchMode(PDO::FETCH_INTO, $this);
        $q->execute(array($id));

        echo $this->name;
    }
}

这是行不通的。没有错误,什么都没有。脚本没有错误,FETCH_ASSOC 工作正常。

FETCH_INTO 有什么问题?

最佳答案

您的代码中有两个错误:

1) 你忘记了 $q->fetch()

 ...
 $q->execute(array($id));
 $q->fetch(); // This line is required

2) 但即使在添加 $q->fetch() 之后你也会得到这个:

Fatal error: Cannot access private property User::$name in ...

因此,如您所见,即使在类方法内部调用 PDO 也无法访问私有(private)成员。

这是我的解决方案:

...
$q->execute(array($id));
$q->setFetchMode(PDO::FETCH_ASSOC);
$data = $q->fetch();
foreach ($data as $propName => $propValue)
{
    // here you can add check if class property exists if you don't want to
    // add another properties with public visibility
    $this->{$propName} = $propValue;
}

关于php - PDO 的 FETCH_INTO $这个类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3296092/

相关文章:

php - Ajaxify PHP 应用程序

php - 使用 PDO ODBC SQL Server 连接时定义编码?

php - undefined variable UpdateQuery

php - PDO 插入不插入多个值

php - mysql 输出特殊字符而不是阿拉伯文 mysql 新版本

php - Zend 框架复选框问题

php - 相互比较多个值

php - Laravel - Model::create 或 Model->save() 上的数组到字符串转换错误

mysql - 将 SQL 结果格式化为数组;按键访问?

php - PHP PDO的prepared statements如何防止sql注入(inject)?使用 PDO 的其他好处是什么?使用PDO会降低效率吗?