Codeigniter 2.1项目。密钥“ PRIMARY”的错误重复输入“”

时间:2018-09-20 12:09:39

标签: php database codeigniter session

我是Codeigniter框架的新手。我已经从github设置了Codeigniter v2现有项目,最近几天我对session.php文件遇到了问题。会话变量中的所有th值都为空,并且出现以下错误

A Database Error Occurred
Error Number: 1062

Duplicate entry '' for key 'PRIMARY'

INSERT INTO `stream_ci_sessions` (`session_id`, `ip_address`, `user_agent`, `last_activity`, `user_data`) VALUES ('', '', '', 1537445113, '')

Filename: libraries/Session.php

Line Number: 283

会话创建部分

function sess_create()
    {
        $sessid = '';
        while (strlen($sessid) < 32)
        {
            $sessid .= mt_rand(0, mt_getrandmax());
        }
        // To make the session ID even more secure we'll combine it with the user's IP
        $sessid .= $this->CI->input->ip_address();
        $this->userdata = array(
                            'session_id'    => md5(uniqid($sessid, TRUE)),
                            'ip_address'    => $this->CI->input->ip_address(),
                            'user_agent'    => substr($this->CI->input->user_agent(), 0, 120),
                            'last_activity' => $this->now,
                            'user_data'     => ''
                            );


        // Save the data to the DB if needed
        if ($this->sess_use_database === TRUE)
        {
            $this->CI->db->query($this->CI->db->insert_string($this->sess_table_name, $this->userdata));
        }
        // Write the cookie
        $this->_set_cookie();
    }

有人能够解决这种错误吗?谢谢

2 个答案:

答案 0 :(得分:0)

您的列session_id是表的主键,您之前在其中插入了一个空值,因此第二次禁止您,因为主键必须是唯一的。

  • ,因此您应该将id列添加到stream_ci_sessions表中,然后将其设置为primary keyauto increment

  • 您可以从一开始就添加id并将其设置为primary keyauto increment,但是首先您应该截断数据。

答案 1 :(得分:0)

添加一个id列作为主键,并使其自动递增。