0

我正在将 MySQL 与 ExpressionEngine 2.2.1 结合使用。这个版本的 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}

有谁知道为什么会发生这个错误?为什么它会发生在生产而不是本地?

任何帮助将不胜感激!

4

4 回答 4

0

您可能在生产系统和本地系统上获得了不同的数据库内容,因此该语句在生产系统上失败并产生错误。

您应该尝试在 phpmyadmin 或类似的东西中执行该语句,以查看您的 sql 语句是否无错误并且与命名没有任何冲突。

于 2012-01-05T14:29:25.200 回答
0

似乎您的 $query 对象没有有效的连接。控制您的用户名、密码和数据库配置。

于 2012-01-05T14:35:19.093 回答
0

启用调试config.phpdatabase.php查看详细的错误消息:

/system/expressionengine/config/config.php

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

/system/expressionengine/config/database.php

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

它也不会伤害:

  • 验证您的 MySQL 数据库凭据
  • 检查 Apache 和/或 PHPerror_log

希望这些步骤能让您更深入地了解您的问题。

于 2012-01-05T21:43:27.313 回答
0

检查以确保生产中的数据库与本地环境具有相同的结构。

从 phpMyAdmin 或您最喜欢的 MySQL GUI 客户端执行以下步骤:

  1. 选择您的 ExpressionEngine 数据库
  2. 执行以下 SQL 语句:
  3. DESCRIBE exp_freeform_fields;
  4. SELECT name FROM exp_freeform_fields;

将本地 MySQL 数据库的结果与生产 MySQL 数据库的结果进行比较。

于 2012-01-05T21:54:27.907 回答