php – PDO :: FETCH_CLASS,不传递类名作为参数
我遇到了一段代码,其中调用了PDO :: FETCH_CLASS而没有将类的名称作为参数传递,如下所示:
function getUsers() { $DBH = $this->getDbh(); $query = "SELECT * FROM users"; try { $STH = $DBH->query($query); $users = $STH->fetchAll(PDO::FETCH_CLASS); } catch(PDOException $e) { } return $users; } 现在,在官方documentation中它说:
所以我不确定我究竟是什么意思,也不知道它是如何运作的. > id:1 那么PDO :: FETCH_CLASS怎么能知道什么是类名呢?我可以用类名称在列表中添加列,FETCH_CLASS会从数据库中获取类名吗?记录结构的例子将受到高度赞赏…… thx *我正在测试这个类而不是作者,所以更改类是无关紧要的 解决方法
对于fetchAll方法,如果未提供classname且未引发PDO :: FETCH_CLASSTYPE标志,则返回stdClass对象(就像使用PDO :: FETCH_OBJ一样).这就是发生的事情(
lxr):
1436 switch(how & ~PDO_FETCH_FLAGS) { 1437 case PDO_FETCH_CLASS: 1438 switch(ZEND_NUM_ARGS()) { 1439 case 0: 1440 case 1: 1441 stmt->fetch.cls.ce = zend_standard_class_def; 1442 break 然后,在do_fetch中,由于没有提供类名,因此该值保持不变.这是有道理的,因为stdClass有时被认为是一种匿名类. ) 这解释了你必须处理的代码; @ eggyal的答案解释了如何使用PDO :: FETCH_CLASS || PDO :: FETCH_CLASSTYPE组合.它实际上是一种非常强大的技术,允许您跳过工厂方法中的样板开关. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |