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

Я работаю с MySQL в сочетании с ExpressionEngine 2.2.1. Эта версия ExpressionEngine автоматически поставляется с модулем запросов, который я использую для фильтрации и отображения результатов ввода из модуля под названием Freeform. Я использую Freeform версии 3.1.1. Все эти элементы хорошо работают вместе и отображают желаемые результаты на моей локальной установке. Однако, когда я отправляю свой код в производство, я получаю эту ошибку:

Неустранимая ошибка: вызов функции-члена num_rows() для необъекта в /var/www/vhosts/xxxxxxxxx.com/systemxxx/expressionengine/modules/query/mod.query.php в строке 183

Вот этот раздел кода, начинающийся со строки 183 файла mod.query.php (я не кодировал этот php и никогда не кодировал php, он уже был включен в сайт, над которым я работаю):

183          if ($query->num_rows() == 0)
184          {
185          return $this->return_data = $this->EE->TMPL->no_results();
186          }

Вот как я использую модуль запросов в своем HTML-шаблоне:

{exp:query sql="SELECT first_name, last_name, email, city FROM exp_freeform_entries WHERE city = 'New York'"}
    <tr>
        <td>{first_name}</td>
        <td>{last_name}</td>
        <td>{email}</td>
        <td>{city}</td>
    </tr>
{/exp:query}

Кто-нибудь знает, почему эта ошибка происходит? Почему это происходит на производстве, а не локально?

Любая помощь будет принята с благодарностью!

4 ответа

Решение

Убедитесь, что база данных в Production имеет ту же структуру, что и ваша локальная среда.

Выполните следующие шаги из phpMyAdmin или вашего любимого клиента MySQL GUI:

  1. Выберите базу данных ExpressionEngine
  2. Выполните следующие операторы SQL:
  3. DESCRIBE exp_freeform_fields;
  4. SELECT name FROM exp_freeform_fields;

Сравните результаты из вашей локальной базы данных MySQL с вашей производственной базой данных MySQL.

Включить отладку в вашем config.php а также database.php чтобы увидеть подробные сообщения об ошибках:

/system/expressionengine/config/config.php

$config['debug'] = '1';

/system/expressionengine/config/database.php

$db['expressionengine']['db_debug'] = TRUE;

Также не мешало бы:

  • Проверьте свои учетные данные базы данных MySQL
  • Проверьте Apache и / или PHP error_log

Надеемся, что эти шаги позволят вам лучше понять вашу проблему.

Похоже, у вашего объекта $query нет допустимого соединения. Контролируйте свое имя пользователя, пароль и конфигурацию базы данных.

Вы, вероятно, получили различное содержимое базы данных в производственных и локальных системах, поэтому в производственной системе произойдет сбой оператора.

Вы должны попытаться выполнить оператор в phpmyadmin или что-то в этом роде, чтобы убедиться, что ваш оператор sql не содержит ошибок и не конфликтует с именами.

Другие вопросы по тегам