2013-03-11 2 views
1

Я изменяю код в своем проекте, и PHP бросает очень странную ошибку в отношении свойства класса, которое больше не существует. Ниже приводится сообщение об ошибке:Ошибка металокации PHP над статическим свойством, которое не существует

Сообщение: Не определено свойство: StdClass :: $ предел
файла: C: \ XAMPP \ HTDOCS \ сайт \ Classes \ model.php
Line: 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.

Что может быть причиной этого?

+0

Что такое '$ this-> st-> fetch()' return? Имеет ли это свойство public? Limit? – mkaatman

+0

единый знак равенства опечатка? – Amir

+0

"limit" - поле запроса? Я не знаю, что такое Config :: $ limit, но вы получаете атрибут (предел) из метода выборки. – Curlas

ответ

1

$row похоже объект StdClass дата: PDOStatement::fetch(). Имена свойств этого объекта соответствуют именам столбцов, возвращаемым в вашем результирующем наборе. Если нет свойства limit, это потому, что нет нулевого столбца limit, возвращаемого вашим SQL-запросом.

0

PDO :: FETCH_OBJ означает, что каждая строка результата будет получена как экземпляр stdClass.

Таким образом, единственная возможная причина заключается в том, что $row->limit не существует!
Добавить !empty($row->limit) проверить, попробуйте var_dump() его, чтобы убедиться, что это правда.

+0

D'oh, я сбился с толку, потому что у меня было свойство статического класса с тем же именем, которое я использовал раньше, я думал, что это так. Спасибо :) –

+0

@JamesDawson Рад помочь вам –

0

Ошибка Undefined property: stdClass::$limit не означает, что она ищет статическое свойство; именно так PHP относится к свойствам вообще (class :: property).

PDO fetch() вернет либо false, если есть ошибка или некоторое представление результата запроса. При использовании

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

, который говорит PDO возвращать результирующие строки как объекты класса по умолчанию stdClass с именами столбцов в строке как на свойства. Таким образом, вы получаете эту ошибку, потому что в полученной строке нет столбца limit.

var_dump($row) Чтобы узнать, что на самом деле возвращается, но, скорее всего, выполняемый запрос отличается от ожидаемого или делает SELECT *, и база данных изменила определение таблицы.

Смежные вопросы