【问题标题】:PDO Column names appear in class after fetchAllPDO 列名出现在 fetchAll 之后的类中
【发布时间】:2013-10-13 15:52:15
【问题描述】:

我有一个带有 id、关键字和值的类。 我正在使用

从名为 Setting 的表中获取数据到类 Setting 中
if ($stmt->execute()) {
  $o = $stmt->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, "Setting", array('id', 'keyword','value'));
}

当我查看 $o 的内容时,我看到以下内容

Array ( [0] => Setting Object ( [id] => id [keyword] => keyword [value] => value [Id] => 1 [Keyword] => AdminMail [Value] => yahoo@yahoo.com ))

我的班级是这样的

class Setting {
var $id;
var $keyword;
var $value;

function __construct($id,$ke,$va) {
    $this->id = $id;
    $this->keyword = $ke;
    $this->value = $va;
}

public function getKeyword() {
    return $this->keyword;
}

public function getValue() {
    return $this->value;
}
}

我希望 $o->getValue 返回 yahoo@yahoo.com 但它返回值。

谁能告诉我为什么“[id] => id [keyword] => keyword [value] => value”出现在我的表的实际输出之前?

【问题讨论】:

  • 问题出在 fetchAll 命令中。 array('id', 'key', 'value') 中的名称与我查询的表中的名称不同。

标签: php mysql pdo fetchall


【解决方案1】:

我不知道,为什么这种棘手的语法糖如此吸引人。
它比这样简单、简单和易读的代码要好得多:

function __construct($init) {
    $this->id      = $init['id'];
    $this->keyword = $init['ke'];
    $this->value   = $init['va'];
}
...
$stmt->execute();
$o = new Settings($stmt->fetchAll());

【讨论】:

  • 它不工作。我得到一个空的 Setting 对象,其中没有任何数据。
  • 好吧,这段代码不是用来复制粘贴的,而是用来展示初始化对象的常规方式。你熟悉吗?你看懂我贴的代码了吗?
  • 如果我正确理解了代码,$stmt->fetchAll() 应该生成一个传递给构造函数的数组,它将所有字段设置为数组中的值。对吗?
  • 是的,这就是目的。一点都不复杂。您的查询是否返回任何数据?你有错误报告吗?
猜你喜欢
  • 2014-01-23
  • 1970-01-01
  • 2016-09-18
  • 2013-05-01
  • 2020-03-14
  • 1970-01-01
  • 2013-08-20
  • 2011-02-15
  • 1970-01-01
相关资源
最近更新 更多