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

PHP在不存在的静态属性上抛出错误,php,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-&g

我正在改变项目中的一些代码,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上的文本编辑器


是什么导致了这种情况?

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

所以唯一可能的原因是$row->limit不存在!
添加空$row->限制检查,尝试var_dumpit以确保这是真的。

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

所以唯一可能的原因是$row->limit不存在! 添加空$row->限制检查,尝试var_dumpit以确保这是真的。

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

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

错误未定义属性:stdClass::$limit并不意味着它正在查找静态属性;这就是PHP在general class::property中引用属性的方式

如果存在错误,PDO的fetch将返回false,或者返回查询结果的某种表示形式。当你使用

$this->st->setFetchMode(PDO::FETCH_OBJ);
这告诉PDO将结果行作为默认类stdClass的对象返回,并将该行的列名作为属性。因此,您将得到该错误,因为结果行没有限制列

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

错误未定义属性:stdClass::$limit并不意味着它正在查找静态属性;这就是PHP在general class::property中引用属性的方式

如果存在错误,PDO的fetch将返回false,或者返回查询结果的某种表示形式。当你使用

$this->st->setFetchMode(PDO::FETCH_OBJ);
这告诉PDO将结果行作为默认类stdClass的对象返回,并将该行的列名作为属性。因此,您将得到该错误,因为结果行没有限制列


您可以使用var_dump$row来调查实际返回的是什么,但执行的查询很可能与您预期的不同,或者它正在执行SELECT*操作,并且数据库已更改了表定义。

$this->st->fetch返回什么?它是否具有公共限制属性?单等号是否为键入错误?限制是否为查询字段?我不知道什么是Config::$limit,但是您正在从一个fetch方法获取一个属性限制。@Amir=符号是故意的。fetch可以返回false,并且您不希望尝试将false当作对象来处理,然后会出现致命错误,因此分配被包装在条件中。也许不是最好的样式,但却是一种非常常见的做法。$this->st->fetch返回什么?它是否具有公共限制属性?单等号是否为键入错误?限制是否为查询字段?我不知道什么是Config::$limit,但是您正在从一个fetch方法获取一个属性限制。@Amir=符号是故意的。fetch可以返回false,并且您不希望尝试将false当作对象来处理,然后会出现致命错误,因此分配被包装在条件中。也许不是最好的风格,但却是一种相当普遍的做法。哦,我感到困惑,因为我有一个静态类属性,它的名称与我以前使用的名称相同,我想是这样的。谢谢:@JamesDawson很高兴帮助你。哦,我很困惑,因为我有一个静态类属性,它的名称与我以前使用的名称相同,我想是这样的。谢谢:@JamesDawson很高兴能帮助你