CodeIgniter中的活动记录增量超过它应该

时间:2011-03-10 21:33:59

标签: php mysql codeigniter

我前几天在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类(所以我可以有多个级别的控制器,而不必求助于手动路由)显然是两次调用所有内容。当我去处理完全不同的代码部分时,我注意到了这一点,并且看到它插入了两个相同数据的记录而不是一个。我删除了那个班级,现在一切都很好了。

谢谢大家的帮助。

3 个答案:

答案 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调用。