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


PHP throwing error over static property that doesn't exist

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

Message: Undefined property: stdClass::$limit
网站文件:C: ' xampp '根' '类' 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文件中的真实代码,所以它不是我的文本编辑器故障。

是什么原因导致的?

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

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

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

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

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

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

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

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

相关文章: