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

[讨论/交流] 弱问,DB操作为什么要做成这么麻烦呢?

  [复制链接]
发表于 2010-5-11 10:02:51 | 显示全部楼层 |阅读模式
之前习惯了用$db->query(...),一条语句全部搞定。
现在要分成几条写,除了对输入变量做过滤外,还有其他什么好处吗?
发表于 2010-5-11 13:37:55 | 显示全部楼层
用不用 AR 完全是个人喜好。
AR 目前我认为最大的好处是隔离不同种类的数据库,再一个,可以让 SQL 语句更清晰,当然必要的转义,安全过滤肯定是有的。

当然,这只限于简单的 SQL 语句,复杂的 AR 也不支持。
发表于 2010-5-12 07:39:18 | 显示全部楼层
主要是为了防止SQL injection。
 楼主| 发表于 2010-5-12 10:19:39 | 显示全部楼层
引入hibernate一类操作DB的思路应该还是不错的,不过做来做去,框架就会越来越庞大了。。。
发表于 2010-5-18 09:47:52 | 显示全部楼层
事实上你现在一样也可以用$this->db->query()
正如Hex所说,给你多了一个操作类选择,用不用个人喜好.
发表于 2010-5-20 16:42:01 | 显示全部楼层
AR最大的作用是防SQL注入。
另外,AR,个人觉得最大的好处就是把SQL分开了,虽然多了一些代码,但条理能更清晰,debug时也更容易确定SQL错误地点。
AR也不完善,很多功能实现不了,如计数器+1操作。
推荐用AR
发表于 2010-5-21 09:57:51 | 显示全部楼层
回复 6# spt119


    计数器加1可以实现,请用关键字 update 搜索论坛。
发表于 2010-5-21 10:16:02 | 显示全部楼层
字段自加,用$this->db->set()的时候,后面加多一个参数FALSE...
如$this->db->set(字段,字段+1,FALSE)
觉得AR在单表查询上是挺方便的.复杂点的话就不便实现了.
发表于 2011-12-12 10:26:08 | 显示全部楼层
PHP复制代码
 
           $this->db->where('uid',$uid);
           $this->db->set('aa','aa+1',false);
           $this->db->update('table_name');
 
复制代码
发表于 2011-12-12 13:06:13 | 显示全部楼层
AR唯一的问题我遇到的就是在where的时候他是不会判断int还是varchar转换成sql的时候一律都是给值添加'单引号',这样在匹配到sql的时候sql就会执行模糊查询了

本版积分规则