我前几天在CodeIgniter论坛上发布了这个,并没有收到回复,所以我在这里尝试。看来由于某种原因,我执行删除语句后跟一个insert语句后,我的表中的自动增量值增加了2而不是1。
这是我的表的创建语法。
CREATE TABLE `brokerage_zip_range` (
`id` int(11) NOT NULL auto_increment,
`zip_code` varchar(10) NOT NULL,
`brokerage_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
我的代码在模型中看起来像这样:
public function assign_zip_range($brokerage_id, $zip_code) {
$this->db->where('brokerage_id',$brokerage_id);
$this->db->delete('brokerage_zip_range');
$this->db->set('brokerage_id', $brokerage_id);
$this->db->set('zip_code', $zip_code);
$this->db->insert('brokerage_zip_range');
}
(请注意,由于我不会进入这里的原因,我不能只是将其作为更新声明。)
我遇到的问题是,当此代码执行正常时,插入的记录会增加多个。因此,在执行此代码之前,记录可能如下所示:
id zip_code brokerage_id
7 95202 2
运行代码后(例如,使用邮政编码92222),现在看起来像是:
id zip_code brokerage_id
9 92222 2
下一个自动增量值应为8,而不是9。
我做错了什么或这是CI事吗?我将指出我已尝试在CI中单独运行此代码,这意味着在它之前或之后根本没有其他操作发生。如果它有所作为(我怀疑它确实如此)我正在使用CI 2.0 / MySQL 5.01 / PHP 5.3。
UPDATE!我找到了答案 所以最后,事实证明我正在使用的自定义MY_Router类(所以我可以有多个级别的控制器,而不必求助于手动路由)显然是两次调用所有内容。当我去处理完全不同的代码部分时,我注意到了这一点,并且看到它插入了两个相同数据的记录而不是一个。我删除了那个班级,现在一切都很好了。
谢谢大家的帮助。
答案 0 :(得分:1)
我真的很怀疑CI是这样做的。尝试通过以下方式输出CI AR生成的SQL:
$this->db->last_query();
以便您可以看到它在数据库上运行的SQL。
答案 1 :(得分:1)
对于其视图中包含Flash内容的其他人:
我发现Flash播放器正在强制我的页面发出第二个请求。在我的情况下,它正在加载视频。我的问题的解决方案是将flash嵌入到一个单独的html文件中,并将该html文件加载到违规视图中的iframe中。
答案 2 :(得分:0)
不直接回答您的问题。但是,通过添加:
尝试profiling您的应用$this->output->enable_profiler(TRUE);
在__construct()
并查看它是否确实只有一个INSERT调用。