我正在改变我的项目中的一些代码,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文件中的真实代码,所以它不是我的文本编辑器。
导致这种情况的原因是什么?
答案 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>