PHP致命错误:在非对象上调用成员函数num_rows()

时间:2012-01-05 14:25:05

标签: php expressionengine freeform

我正在与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}

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

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

config.phpdatabase.php中启用调试功能,以查看详细的错误消息:

<强> /system/expressionengine/config/config.php

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

<强> /system/expressionengine/config/database.php

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

它也不会伤害:

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

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

答案 3 :(得分:0)

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

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

  1. 选择ExpressionEngine数据库
  2. 执行以下SQL语句:
  3. DESCRIBE exp_freeform_fields;
  4. SELECT name FROM exp_freeform_fields;
  5. 将本地MySQL数据库的结果与生产MySQL数据库进行比较。