Неустранимая ошибка 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:
- Выберите базу данных ExpressionEngine
- Выполните следующие операторы SQL:
DESCRIBE exp_freeform_fields;
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 не содержит ошибок и не конфликтует с именами.