【问题标题】:CodeIgniter - ci_sessions migrationsCodeIgniter - ci_sessions 迁移
【发布时间】:2012-09-26 16:21:24
【问题描述】:

我想知道是否有人可以帮忙。

我刚刚开始使用 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;

【问题讨论】:

    标签: php codeigniter migration


    【解决方案1】:

    请阅读此处的文档:

    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 Sessions 表。

    【讨论】:

      【解决方案2】:

      如果您有一个大型 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/config.php 中的 $config['sess_use_database']true,那么当您转到迁移 URL 时它会失败,因为 Codeigniter 会首先尝试在数据库中为您的浏览器创建一个会话条目,并且数据库表还不存在..

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

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

      【讨论】:

      • 谢谢!这是正确的解释,应该是正确的,而不是上面的。
      • 另请注意,在 Codeigniter 3 中,ci_sessions 表中的字段已更改,因此也需要考虑!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      相关资源
      最近更新 更多