CodeIgniter - ci_sessions迁移

时间:2012-09-26 16:21:25

标签: php codeigniter migration

我想知道是否有人可以提供帮助。

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

是否有人可以将此SQL转换为我的迁移,以便我可以看到它是如何完成的。

我的SQL如下:

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;

2 个答案:

答案 0 :(得分:3)

请阅读此处的文档:

CodeIgniter Migrations

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

    $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会话表。

答案 1 :(得分:3)

你也可以简单地执行此操作,如果你有一个大的SQL查询块,你知道它是“安全的”并且你想节省时间(在我看来,这是一个基于表的复杂性和机会的判断调用在将原始SQL转换为数组时出错 - 毕竟在迁移过程中,所有内容都是硬编码的,并且您不必担心SQL注入的可能性等。)

    $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);

但是,我认为我不建议将会话表作为迁移加载,因为如果$config['sess_use_database']中的config/config.phptrue,则当您转到迁移网址时, ll会失败,因为Codeigniter会首先尝试在浏览器的数据库中创建一个会话条目,而数据库表还不存在..

A Database Error Occurred
Error Number: 1146
Table 'characterhub.ci_sessions' doesn't exist

为了使其正常运行,您或任何执行迁移的人必须先将sess_use_database设置为false,然后再运行迁移,然后再将其更改回true。 / p>