我正在与ExpressionEngine 2.2.1一起使用MySQL。此版本的ExpressionEngine自动附带一个查询模块,我用它来过滤和显示一个名为Freeform的模块的输入结果。我使用的是Freeform 3.1.1版。所有这些元素都能很好地协同工作,并在我的本地设置上显示所需的结果。但是当我将代码推送到生产环境时,我收到了这个错误:
致命错误:在第183行的/var/www/vhosts/xxxxxxxxx.com/systemxxx/expressionengine/modules/query/mod.query.php中调用非对象上的成员函数num_rows()
以下是从mod.query.php的第183行开始的代码的这一部分(我没有编写这个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}
有谁知道为什么会出现这种错误?为什么它会在生产中发生而不是在本地发生?
非常感谢任何帮助!
答案 0 :(得分:0)
您可能在生产和本地系统上获得了不同的数据库内容,因此生产系统上的语句失败会产生错误。
你应该尝试在phpmyadmin或类似的东西中执行语句,看看你的sql语句是否没有错误且与命名没有任何冲突。
答案 1 :(得分:0)
似乎你的$ query对象没有有效的连接。控制您的用户名,密码和数据库配置。
答案 2 :(得分:0)
在config.php
和database.php
中启用调试功能,以查看详细的错误消息:
<强> /system/expressionengine/config/config.php 强>
$config['debug'] = '1';
<强> /system/expressionengine/config/database.php 强>
$db['expressionengine']['db_debug'] = TRUE;
它也不会伤害:
error_log
希望这些步骤可以让您更深入地了解您的问题。
答案 3 :(得分:0)
检查以确保生产中的数据库与本地环境具有相同的结构。
从phpMyAdmin或您最喜欢的MySQL GUI客户端执行以下步骤:
DESCRIBE exp_freeform_fields;
SELECT name FROM exp_freeform_fields;
将本地MySQL数据库的结果与生产MySQL数据库进行比较。