我想使用 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/