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

经验分享 解决CI在生成SQL语句时前缀不统一的问题

[复制链接]
发表于 2008-9-28 09:34:36 | 显示全部楼层 |阅读模式
解决CI在生成SQL语句时前缀不统一的问题.
其实这个问题一直都存在,包括最新的1.6.3,具体的诊状为:
比如
PHP复制代码
$this->db->select('*');
  $this->db->from('archives');
  $this->db->where('typeid', $tid);
  $this->db->where('iscommend', 10);
   $this->db->where('litpic <> ', '');
复制代码


有这么一段代码,如果你在配置文件里设定有表前缀的话,这时候你可不要指望它能正确执行,在 $this->db->where('litpic <> ', ''); 这一句的时候它是不会增加正确的表前缀的,解决的办法嘛也很简单,就是用别名.
像这样
PHP复制代码
$this->db->select('arch.*');
  $this->db->from('archives AS arch');
  $this->db->where('arch.typeid', $tid);
  $this->db->where('arch.iscommend', 10);
   $this->db->where('arch.litpic <> ', '');
复制代码

这样子就不会有问题了,不信大家可以试试看.

原贴来自我的博客 http://www.mb120.com/blog/?p=612
发表于 2008-9-28 11:21:59 | 显示全部楼层
一直手写,还没这样用
发表于 2008-9-28 11:25:33 | 显示全部楼层
楼主所说的情况,where 语句不涉及表前缀吧??
 楼主| 发表于 2008-9-28 12:55:46 | 显示全部楼层
原帖由 Hex 于 2008-9-28 11:25 发表
楼主所说的情况,where 语句不涉及表前缀吧??


的确存在有这种问题,这是我在实践中碰到的,这是由于CI不能正确处理 $this->db->where('arch.litpic <> ', ''); 这个里面的 关系运算符 <> ,但是 写成这种 $this->db->where('iscommend', 10); 则不会有问题,因为这里面没有关系运算符,换句话说就是只有再比较两个值相等的时候才不会出现问题,因为这个时候不需要写关系运算符进去.
发表于 2008-9-28 15:15:30 | 显示全部楼层
我主要是不太明白,where 不是操作字段的吗?为什么会影响数据库表的名称呢?
发表于 2008-9-28 22:03:09 | 显示全部楼层
不好意思!!能問一下表前綴是什麼意思嗎!因為我是台灣人所以有些專有名詞真的看不太懂
发表于 2008-9-29 16:41:33 | 显示全部楼层
表前缀就是形如: xxx_table 的东西,xxx_ 就是表前缀。
发表于 2008-9-29 18:51:04 | 显示全部楼层
比较麻烦一点。。。.........................

本版积分规则