【问题标题】:Fatal Error:Call to a member function num_rows() on a non-object致命错误:调用非对象上的成员函数 num_rows()
【发布时间】:2014-03-04 08:15:16
【问题描述】:

因为我已经完成了 codeigniter 项目,将文件从本地服务器传输到实时服务器,这里一切似乎都正确,

http://royal.skylabsinc.in/

但显示错误..请帮助我... 这是屏幕截图

" 致命错误:在非对象上调用成员函数 num_rows() /home2/skylabsi/public_html/royal/system/libraries/Session.php 上线 215"

【问题讨论】:

  • 您需要为您的问题提供更多上下文、给出错误的代码部分、您尝试了什么等。
  • application >config > autoload.php 下面的代码在这里 $autoload['libraries'] = array('database','session');我们在上面的名称“session”中调用内置的“CI_Session”类
  • 我知道这是一个老问题,但我刚刚遇到了类似的问题,这可能对某人有用。对我来说,问题是mysql数据库中的会话表已损坏,需要修复。

标签: php codeigniter session


【解决方案1】:

我有同样的错误。您可以尝试在数据库中创建 ci_session 表。它解决了我的问题。

【讨论】:

  • 这对我来说是一个很好的指导,当您从一台服务器迁移到另一台服务器时,错误的数据库凭据也可能导致此错误。
【解决方案2】:

/home2/skylabsi/public_html/royal/system/libraries/Session.php 表明问题与会话有关。

Call to a member function num_rows() on a non-object 表明预期对象为空,这很可能是由于来自数据库的错误查询造成的。

当我第一次单击链接时,我也能够加载页面,但刷新/重新访问失败。检查了不同的浏览器以开始新的会话,得到了同样的结果。第一次加载没问题,后面的就不行了。这再次表明会话存在问题。

【讨论】:

  • 会话在本地服务器上运行完美,但是当放到实时服务器上时..这显示错误..
  • 如果没有更多上下文,我无法给出更多答案。代码是什么,你做了什么等等。
【解决方案3】:

让我猜猜,你的本地服务器是 windows,实时服务器是 linux。如果是这样,那么很可能您在文件名、类名和调用名中使用不同的大写字母命名了您的模式。

类名的第一个字母必须大写,其余部分小写。确保您的类扩展了基础模型类。

文件名将是您的类名的小写版本。

【讨论】:

  • 你的猜测是正确的,windows to linux...我们使用了codeigniter的内置会话,我们在自动加载配置文件中通过名称“session”调用会话..在系统库中的类名是“CI_Session”这个存储在文件名“Session.php”中
【解决方案4】:

将以下代码添加到类中

private $CI;

public function __construct()
{
     $this->CI = &get_instance();
     $this->load->library('session');
     $this->load->database();
}

【讨论】:

  • 感谢您的解决方案:)
【解决方案5】:

非常快速和简短的答案是:

如果您在 config/autoload.php 中设置 $this->load->library('session');,请确保您的服务器数据库中有“CI_SESSION”表。

CREATE TABLE IF NOT EXISTS `ci_sessions` (
  `session_id` varchar(40) NOT NULL DEFAULT '0',
  `ip_address` varchar(45) NOT NULL DEFAULT '0',
  `user_agent` varchar(120) NOT NULL,
  `last_activity` int(10) unsigned NOT NULL DEFAULT '0',
  `user_data` text NOT NULL,
  PRIMARY KEY (`session_id`),
  KEY `last_activity_idx` (`last_activity`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

如果你使用 CI_SESSION 那么你必须有 CI_SESSION 表。

【讨论】:

    【解决方案6】:

    尽管数据库中存在 CI_SESSIONS 表,但我也遇到了这个错误。 解决办法是:

    在我的实时服务器上,我创建了数据库用户和数据库,但我没有将用户分配给数据库,因此这是一个权限问题,我连接的 mysql 用户没有读取数据库的权限,并且因此表 CI_SESSIONS。

    【讨论】:

      【解决方案7】:

      这个为我工作

      从你的 config.php 中删除这两行

      $config['sess_use_database']     = TRUE;
      $config['sess_table_name']       = 'ci_sessions';
      

      【讨论】:

        猜你喜欢
        • 2015-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-06
        • 2013-11-25
        • 2012-05-30
        • 2016-08-30
        相关资源
        最近更新 更多