【问题标题】:PDO class extends and fetch class in PHPPDO 类在 PHP 中扩展和获取类
【发布时间】:2016-11-09 01:28:51
【问题描述】:

抱歉,问题太糟糕了,无法正确回答,所以现在我编辑了:


手册说:

PDO::FETCH_CLASS:返回指定类的实例,将每一行的列映射到类中的命名属性。

我的疑问是,如果该类扩展自另一个具有更多属性的类,是否会实例化该属性?

抱歉,如果我的问题不清楚,我不会说英语。谢谢大家。

【问题讨论】:

  • $result 是在哪里定义的? ;-)
  • 代码没有意义。你没有连接到数据库,你的类没有方法,$result 从未定义,你正在使用$this 对象的外部,等等等等。除非你在其他地方做这一切,否则你只是假设查询总是会成功。
  • 除属性声明外,类中的所有代码都必须在函数中。你不能只有这样的陈述。
  • 对不起,这个问题很难得到正确的答案,所以现在我编辑了。感谢您花时间回答我。
  • @facumontero 问题不在于问题,而在于代码。您的代码绝对没有任何意义。

标签: php pdo fetch extends


【解决方案1】:

一个好问题。

对于 PDO,类层次结构实际上并不重要。 PDO 所做的只是从数据库中获取列并将它们分配给类属性,无论类定义或继承如何。

  • 如果属性不存在,PDO 将尝试创建它。
  • 如果有一个属性没有要映射的列 - 那么 PDO 将不理会它。

就这么简单。因此,它应该创建您从数据库中选择的任何内容。

对于您之前的问题中的特定代码 - 您必须对其进行调试。看,要查看是否获取了任何内容,您正在使用任何方法 printNickName()。但是这种方法或任何中间过程都可能存在任何错误。我建议您只创建空类,在其中获取数据,然后直接检查属性。

确保所有属性都已正确设置后,您可以尝试使用自定义类定义。要调试返回的数据,我建议使用

$stmt->execute();
var_dump($stmt->fetchAll(PDO::FETCH_CLASS, 'User'));

您可以从我的文章Fetching objects with PDO中了解 PDO 类处理的其他细节

【讨论】:

  • 感谢您的回答!但是当我这样做时,我会得到: Array ( [0] => User Object ( [idUser:User:private] => 1 [name:People:private] => [surname:People:private] => [idPeople: People:private] => [name] => Alexandro [surname] => Cruz [idPeople] => 5 ) )
  • @facumontero 我认为这与您的查询有关。可以var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));查看吗?
猜你喜欢
  • 2012-01-06
  • 2011-07-07
  • 2016-01-03
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 2011-03-26
相关资源
最近更新 更多