1

我正在更改项目中的一些代码,PHP 抛出了一个关于不再存在的类属性的非常奇怪的错误。以下是错误信息:

消息:未定义的属性:stdClass::$limit
文件:C:\xampp\htdocs\site\Classes\model.php
行:48

这是引发错误的大部分方法,第 48 行标记为:

$this->st->execute();
$this->st->setFetchMode(PDO::FETCH_OBJ);

if($row = $this->st->fetch()) {
    return $max - $row->limit; // line 48
}

return $max;

Config::$limit曾经存在,但是当我对代码进行更改时,我摆脱了它。我已经通过一些文本编辑器验证了上面的代码是保存在 PHP 文件中的真实代码,所以它不是我在 Fritz 上的文本编辑器。

这可能是什么原因造成的?

4

3 回答 3

1

$row似乎是StdClass返回的对象PDOStatement::fetch()。此对象的属性名称对应于结果集中返回的列名称。如果没有属性,那是因为您的 SQL 查询limit没有返回列。limit

于 2013-03-11T14:46:39.257 回答
0

PDO::FETCH_OBJ 意味着每个结果行都将作为stdClass实例获取。

所以唯一可能的原因就是$row->limit不存在!
添加!empty($row->limit)检查,尝试var_dump()以确保这是真的。

于 2013-03-11T14:41:52.940 回答
0

该错误Undefined property: stdClass::$limit并不意味着它正在寻找静态属性;这就是 PHP 引用一般属性的方式(class::property)。

如果有错误或查询结果的某些表示,PDOfetch()将返回。false当你使用

$this->st->setFetchMode(PDO::FETCH_OBJ);

它告诉 PDO 将结果行作为默认类的对象返回,并将行stdClass的列名作为属性。所以你得到了那个错误,因为结果行没有limit列。

您可以var_dump($row)调查实际返回的内容,但很可能正在执行的查询与您的预期不同,或者它正在执行SELECT *并且数据库已更改表定义。

于 2013-03-11T14:49:55.287 回答