首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CodeIgniter - ci_sessions迁移

CodeIgniter - ci_sessions迁移
EN

Stack Overflow用户
提问于 2012-09-27 00:21:25
回答 2查看 8.5K关注 0票数 2

我想知道是否有人能帮上忙。

我刚刚开始在CodeIgniter中使用迁移,但我在尝试如何将SQL转换为迁移时遇到了麻烦。

有没有人可以为我将这个SQL转换为迁移,这样我就可以看到它是如何完成的。

我拥有的SQL如下:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `ci_sessions` (
  `session_id` varchar(40) COLLATE utf8_bin NOT NULL DEFAULT '0',
  `ip_address` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '0',
  `user_agent` varchar(150) COLLATE utf8_bin NOT NULL,
  `last_activity` int(10) unsigned NOT NULL DEFAULT '0',
  `user_data` text COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-27 00:47:16

请阅读此处的文档:

CodeIgniter Migrations

实际上,您需要使用CodeIgniter dbforge类来创建表。使用上面的代码:

代码语言:javascript
复制
    $this->dbforge->add_field(array(
        'session_id' => array(
            'type' => 'VARCHAR',
            'constraint' => '40'
        ),
        'ip_address' => array(
            'type' => 'VARCHAR',
            'constraint' => '16'
        ),
        'user_agent' => array(
            'type' => 'VARCHAR',
            'constraint' => '150'
        ),
        'last_activity' => array(
            'type' => 'INT',
            'constraint' => '10'
        ),
        'user_data' => array(
            'type' => 'TEXT'
        )
    ));

    $this->dbforge->add_key('session_id', TRUE);
    $this->dbforge->create_table('ci_sessions');

有关dbforge类的文档可以在以下位置找到:

ellislab.com/codeigniter/user-guide/database/forge.html

注意:,我不建议修改CI Session表。

票数 3
EN

Stack Overflow用户

发布于 2012-12-20 06:25:51

如果你有一个大的SQL查询块,你知道它是“安全的”,并且你想节省时间(在我看来,这是一个基于表的复杂性和在将原始SQL转换成数组时出错的可能性的判断--毕竟在迁移中,所有的东西都是硬编码的,你不用担心SQL注入的机会等等),你也可以这么做。

代码语言:javascript
复制
    $sql = "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`)
)";
    $this->db->query($sql);

然而,我不建议将sessions表作为迁移加载,因为如果config/config.php中的$config['sess_use_database']true,那么当您转到迁移URL时,它将失败,因为Codeigniter将首先尝试在数据库中为您的浏览器创建一个会话条目,而数据库表还不存在。

代码语言:javascript
复制
A Database Error Occurred
Error Number: 1146
Table 'characterhub.ci_sessions' doesn't exist

因此,要让它工作,您或执行迁移的任何人都必须首先将sess_use_database设置为false,然后运行迁移,然后再将其更改回true

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12606167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档