【问题标题】:database error 1054 in codeignitercodeigniter 中的数据库错误 1054
【发布时间】:2015-06-28 03:14:22
【问题描述】:

我正在尝试做一个 OTH 应用程序,但我收到了这个错误

发生数据库错误

错误号:1054

“字段列表”中的未知列“数据”

选择data FROM ci_sessions WHERE id = 'dd8fddaabb45c365fbf27a6fdc5ea60d59f569e4' 和 ip_address = '::1'

文件名:libraries/Session/drivers/Session_database_driver.php

行号:160

这是 Session_database_driver.php

public function read($session_id) {
        if ($this->_get_lock($session_id) !== FALSE)
        {
            // Needed by write() to detect session_regenerate_id() calls
            $this->_session_id = $session_id;

            $this->_db
                ->select('data')
                ->from($this->_config['save_path'])
                ->where('id', $session_id);

            if ($this->_config['match_ip'])
            {
                $this->_db->where('ip_address', $_SERVER['REMOTE_ADDR']);
            }

            if (($result = $this->_db->get()->row()) === NULL)
            {
                $this->_fingerprint = md5('');
                return '';
            }

            // PostgreSQL's variant of a BLOB datatype is Bytea, which is a
            // PITA to work with, so we use base64-encoded data in a TEXT
            // field instead.
            $result = ($this->_platform === 'postgre')
                ? base64_decode(rtrim($result->data))
                : $result->data;

            $this->_fingerprint = md5($result);
            $this->_row_exists = TRUE;
            return $result;
        }

        $this->_fingerprint = md5('');
        return '';
}

【问题讨论】:

  • @OfirBaruch 我试过了,但它不起作用。实际上那里有一些表名丢失的问题。
  • 如果您将select('data') 更改为select('user_data') 会发生什么?
  • @OfirBaruch 'where 子句'中的未知列'id' SELECT user_data FROM ci_sessions WHERE id = '0c37a2a2094055181b386efea510a21068d71e4d' AND @98765span>@98765span>2':1':1'
  • 我想我理解这个问题

标签: php codeigniter wamp


【解决方案1】:

根据CI手册关于Sessions的基本格式 ci_sessions 表是:

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

在您的 php 代码中,您使用不同的字段:

$this->_db
                ->select('data')
                ->from($this->_config['save_path'])
                ->where('id', $session_id);

因此,通过将代码更改为:

$this->_db
                ->select('user_data')
                ->from($this->_config['save_path'])
                ->where('session_id', $session_id);

您的代码应该可以工作。

【讨论】:

  • 非常感谢!你拯救了我的一天!
【解决方案2】:

我认为正确的解决方案是检查您的数据库是否正确创建。

根据Documentation for CI 3.0.0,正确的数据库应该是:

    CREATE TABLE IF NOT EXISTS `ci_sessions` (
        `id` varchar(40) NOT NULL,
        `ip_address` varchar(45) NOT NULL,
        `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
        `data` blob NOT NULL,
        PRIMARY KEY (id),
        KEY `ci_sessions_timestamp` (`timestamp`)
);

我不同意更改 CI 驱动程序文件

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我已经改变了......

    $this->_db
                    ->select('data')
                    ->from($this->_config['save_path'])
                    ->where('id', $session_id);
    

    到->>>>>

    $this->_db
                    ->select('user_data')
                    ->from($this->_config['save_path'])
                    ->where('session_id', $session_id);
    

    如果我在我的 config.ph 中这样做,问题就会存在

    $config['sess_expiration'] = 7200;
    $config['sess_expire_on_close'] = TRUE;
    $config['sess_encrypt_cookie'] = TRUE;
    $config['sess_use_database'] = TRUE;
    $config['sess_table_name'] = 'ci_sessions';
    $config['sess_match_ip'] = TRUE;
    $config['sess_match_useragent'] = TRUE;
    $config['sess_time_to_update'] = 300;
    

    【讨论】:

    • 哦错过了..->where('id', $session_id);更改了一些字段,例如“user_data”和“session_id”,并且......它有效......
    猜你喜欢
    • 2017-01-10
    • 2017-06-06
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    相关资源
    最近更新 更多