【问题标题】:PHP Fatal error: Call to a member function num_rows() on a non-objectPHP 致命错误:在非对象上调用成员函数 num_rows()
【发布时间】:2012-01-06 05:54:27
【问题描述】:

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

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

任何帮助将不胜感激!

【问题讨论】:

  • 欢迎来到 Stack Overflow!您可能没有在查询中进行任何错误检查。您需要检查mysql_query() 调用是否实际成功。否则,如果查询失败,您的脚本将中断。如何做到这一点在mysql_query()this reference question. 的手册中进行了概述
  • 可能您在生产检查时错过了上传一些文件
  • 感谢 Hemant,但所有文件都已上传。

标签: php expressionengine freeform


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 如何尝试执行我的语句以查看它是否没有错误?实际上,深入研究 phpmyadmin 是我们网站的一部分,我对此仍然很模糊。
    • 看看phpmyadmin,有可能执行原始SQL,只需将你的语句粘贴到那里。
    • Ans 是的,如果您的数据库缺少生产服务器上最有可能导致此问题的某些字段,您将需要创建它们。也许最好的解决方案是再试一次控制面板。
    • 酷,我找到了执行原始 SQL 的地方。我粘贴了我的声明,它实际上返回了结果。该网页仍然无法在浏览器中运行...
    【解决方案3】:

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

    【讨论】:

    • 您能进一步解释一下吗?据我所知,我的用户名、密码和数据库配置都是正确的
    【解决方案4】:

    在您的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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 2016-02-12
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多