用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4068|回复: 5
收起左侧

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

[复制链接]
发表于 2010-12-27 15:24:46 | 显示全部楼层 |阅读模式
我有这样的一个操作:先删除数据库内某行,然后根据条件获取剩余行的数量

写成这样
$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才对的样子。

那么,正确的处理方法是怎样的呢?
发表于 2010-12-27 19:17:55 | 显示全部楼层
所有执行性ar动作(乳get,update,delete)之后,ci都会删掉之前存储的条件信息
 楼主| 发表于 2010-12-31 10:23:02 | 显示全部楼层
在ci官网得到的解决方案

$this->db->save_queries = false;

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

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

这个属性,在手册里,只有更新记录提到过。其他的地方都没发现。
发表于 2010-12-31 11:05:46 | 显示全部楼层
这恐怕就是所谓的“未公开”的 API。呵呵
CIer  发表于 2013-4-29 20:07:26
你这个SQL语句是重复。。。id = 1 and id
CIer  发表于 2013-5-2 22:02:55
我有一批数据,在mssql中。我要遍历这个数据。比如sele… 回答 mp4.td为什么mp4格式的电影多了一个td就放不了呢?有什么办法可以解决吗 匿名 去问题页回答 mp4.td为什么mp4格式的电影多了

本版积分规则