我想知道是否有人能帮上忙。
我刚刚开始在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;发布于 2012-09-27 00:47:16
请阅读此处的文档:
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 Session表。
发布于 2012-12-20 06:25:51
如果你有一个大的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);然而,我不建议将sessions表作为迁移加载,因为如果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。
https://stackoverflow.com/questions/12606167
复制相似问题