PHP在不存在的静态属性上抛出错误

时间:2013-03-11 14:38:41

标签: php

我正在改变我的项目中的一些代码,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文件中的真实代码,所以它不是我的文本编辑器。

导致这种情况的原因是什么?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

PDO :: FETCH_OBJ表示每个结果行都将被提取为stdClass个实例。

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

答案 2 :(得分:0)

错误Undefined property: stdClass::$limit并不意味着它正在寻找静态属性;这就是PHP通常如何引用属性(class :: property)。

如果出现错误或查询结果的某种表示,PDO的fetch()将返回false。当你使用

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

告诉PDO将结果行作为默认类stdClass的对象返回,并将行的列名作为属性。因此,您收到该错误,因为生成的行没有limit列。

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