zfgf 发表于 2010-12-27 15:24:46

ci数据库类库的问题,如何使sql马上执行并清掉where的内容?

我有这样的一个操作:先删除数据库内某行,然后根据条件获取剩余行的数量

写成这样
$this->db->where('id',1);
$this->db->delete('test');

$this->db->where('id <',100);
$this->db->count_all_results();

结果发现,组合出来的sql是这样的
select count(*)from test where id = 1 and id < 100

除了这个问题外,还发现系统似乎是先执行了这句count,然后才去执行了delete,因为返回的值是1,如果是先delete的话应该是0才对的样子。

那么,正确的处理方法是怎样的呢?

visvoy 发表于 2010-12-27 19:17:55

所有执行性ar动作(乳get,update,delete)之后,ci都会删掉之前存储的条件信息

zfgf 发表于 2010-12-31 10:23:02

在ci官网得到的解决方案

$this->db->save_queries = false;

这个解决了我的update后查询的问题。

这个情况很奇怪,我测试过,即使将这个属性打开,get的时候,query并不会发生“污染”的问题。但是在我的delete中,却出现了“污染”的问题,将query不保存后,就解决了。

这个属性,在手册里,只有更新记录提到过。其他的地方都没发现。

Hex 发表于 2010-12-31 11:05:46

这恐怕就是所谓的“未公开”的 API。呵呵

Anonymous 发表于 2013-4-29 20:07:26

你这个SQL语句是重复。。。id = 1 and id

Anonymous 发表于 2013-5-2 22:02:55

我有一批数据,在mssql中。我要遍历这个数据。比如sele… 回答 mp4.td为什么mp4格式的电影多了一个td就放不了呢?有什么办法可以解决吗 匿名 去问题页回答 mp4.td为什么mp4格式的电影多了
页: [1]
查看完整版本: ci数据库类库的问题,如何使sql马上执行并清掉where的内容?