Неустранимая ошибка: вызов функции-члена count () для необъектного PDO

0

Я сделал ошибку новобранец, начав свой проект в окнах и переведя его на unbuntu. Этот шаг был навязан мне и привел к множеству непредвиденных последствий. Это вызвало множество ошибок, когда один из них был фатальным.

Я знаю, что объект не является нулевым, просто делая var_dump.Inside var_dump метод существует. Поэтому мой вопрос: почему это безупречно работает в среде Windows, а не в среде Linux. Я просмотрел код и исправил все свои проблемы с капитализацией, которые, как я думаю.

Код, который генерирует ошибку:

public function find($user = null) {
        if ($user) {
            $field = (is_numeric($user)) ? 'id' : 'username';

            $data = $this->_db->get('user', array($field, '=', $user));
             var_dump($data);
            if ($data->count()) {
                $this->_data = $data->first();
                return true;
            }
        }

Содержание

object(DB)#3 (6) { ["_pdo":"DB":private]=> object(PDO)#4 (0) { } ["_query":"DB":private]=> object(PDOStatement)#5 (1) { ["queryString"]=> string(31) "SELECT * FROM user WHERE id = ?" } ["_error":"DB":private]=> bool(false) ["_result":"DB":private]=> array(1) { [0]=> object(stdClass)#6 (8) { ["id"]=> string(2) "39" ["username"]=> string(8) "test1234" ["password"]=> string(64) "d1dcebd95402062c466eeb1e2b5e6c3b217a0fe160bc3baac86bafc9613494e9" ["salt"]=> string(32) ".JMs.ˆ~ìdÿ)7Ð §FKS¨Ê×$'å¹Yˆc¥" ["name"]=> string(0) "" ["joined"]=> string(10) "2014-11-20" ["disabled"]=> string(1) "0" ["email"]=> string(18) "[email protected]" } } ["_count":"DB":private]=> int(1) ["error"]=> bool(false) } 

        return false;
    }

Опять же, это мой первый проект.

  • 0
    Разные версии php?
  • 0
    Убедитесь, что переменная $data записана с использованием той же кодировки charset (или просто скопируйте ее из строки выше в место с count() ). Или перепечатайте это. PHP позволяет микшировать кодировки в именах переменных (например , буквы a из ASCII и любого другого набора Unicode) и создает другие переменный.
Показать ещё 3 комментария
Теги:

1 ответ

0

Сначала я преобразовал результат в массив, а затем вызовет стандартный count:

public function find($user = null) {
    if ($user) {
        $field = (is_numeric($user)) ? 'id' : 'username';

        $result = $this->_db->get('user', array($field, '=', $user));
        $data = $result->result_array();
        var_dump($data);
        if (count($data) > 0) {
            $this->_data = $data[0];
            return true;
        }
}

Что касается причины проблемы: могут быть различия между версиями. Это не проблема, с которой вы переключили операционные системы, это хорошо для обучения.

РЕДАКТИРОВАТЬ:

По-видимому, моей предыдущей идеи было недостаточно, по крайней мере, в среде, где она должна работать. У меня нет возможности проверить это сейчас, поэтому моя новая идея может быть ошибочной. Я поделюсь им, хотя, надеясь на лучшее:

public function find($user = null) {
    if ($user) {
        $field = (is_numeric($user)) ? 'id' : 'username';

        $statement = $this->_db->prepare("select * from user where ".$field." = :userValue");
        $statement->execute(array(':userValue' => $user));
        if ($data = $statement->fetch()) {
            $this->_data = $data;
            return true;
        }
    }
  • 0
    Я с нетерпением попробовал ваше предложение и получил ошибку. Неустранимая ошибка: вызов неопределенного метода DB :: result_array ()
  • 0
    @ o6t9o, спасибо за ваши наблюдения, я отредактировал свой ответ. Я сохранил первоначальную версию, которая была помечена как неверная в вашем комментарии, и под редакцией я поделился своей новой идеей.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню