无法使用PDO :: FETCH_CLASS填充对象的属性

时间:2015-05-10 18:29:47

标签: php pdo

PDO如何在这种情况下工作?我做错了什么?我想,变量$ full会输出" John Smith" ,因为在这两种情况下,类的实例都是$ user。

我试图调试这个程序,我已经把一个观察者放在了$ first_name上。当degugger进入课程范围时,我会看到输出" John"。

我应该在此代码中添加/更改以获得输出" John Smith"

protected

2 个答案:

答案 0 :(得分:1)

问题是Database::fetchObject正在返回类的新实例,而不是修改调用它的对象。使用:

public function findById($id = 0)
{
    $sql = "SELECT * FROM " . $this->table . " WHERE id = :id";
    $params = [":id" => $id];
    $class = get_called_class();
    $result = $this->findBySql($sql, $params);
    $user = $this->db->fetchObject($result, $class);
    $this->first_name = $user->first_name;
    $this->last_name = $user->last_name;
    return $this;
}

答案 1 :(得分:0)

$user是一个空对象,其属性未在任何地方设置。

当您致电$user->findById(1)时,会调用$db->fetchObject($result, "User");,调用$stmt->fetchAll(PDO::FETCH_CLASS, $className);,它会返回一个新的User对象(实际上它是一个包含该对象的数组),与您创建的不同

此对象的属性已填充,并由所有函数返回,然后存储在$found变量中,该变量是一个不同的变量,并且具有与$user变量关联的不同对象

您在fullName()变量上调用$user方法,该变量与空对象关联,因此返回值是空格字符("" . " " . ""的结果)。

您可以按$user->fullName()更改$found->fullName(),并且一切都应该正常,因为$found包含您从数据库加载的数据。