PDO PHP Fetch Class

2022-08-30 11:02:11

我正在学习php中的pdo,以使数据库访问更容易,更高效。我读过的一个关于获取_class的解释是,你的对象的属性是在调用构造函数之前设置的。这是什么意思?任何方向都非常感谢。


答案 1

这意味着,当使用 PDO 将结果返回到自定义对象时,您需要设置与查询结果键相对应的成员变量。

如:

class User
{
    //Predefine Here
    public $id;
    public $username;
    public $password;
    public $email;
    public $hash;

    public function profileLink()
    {
         return sprintf('<a href="/profile/%s">%s</a>',$this->id,$this->username);
    }
}

$result = $sth->fetchAll(PDO::FETCH_CLASS, "User");
foreach($result as $user)
{
    echo $user->profileLink();
}

这样,PDO 可以将变量设置为其内部范围之外的对象。

如果你的用户类是这样的:

class User
{
}

则 PDO 将无法从作用域外设置值,因为未定义任何属性。


答案 2

假设您有这段代码片段

<?php
class Foo {
    public $bar;

    public function __construct()
    {
        $this->bar = 1;
    }
}

$stmt = $dbh->prepare("SELECT bar FROM foo");
$stmt->setFetchMode(PDO::FETCH_CLASS, 'Foo'); 
$stmt->execute();
$obj = $stmt->fetch()
?>

$obj的柱线属性将设置为“1”,而不是从数据库中检索到的。

如果您希望将其设置为来自数据库的结果而不是“1”,则可以将读取模式更改为

$stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Foo'); 

这会导致在将结果分配给属性之前调用构造函数


推荐