百度首页 | 百度空间
 
查看文章
 
CakePHP中的find操作符Bug
2008年05月14日 星期三 下午 10:44
作者:老王

在CakePHP中,如果我们想找到一个名为“Not Name”的目录,凭直觉,其写法大概如下:

$this->Category->find(array('Category.name' => 'Not Name'));

但是CakePHP生成的SQL却很出乎以外:

WHERE NOT ((`Category`.`name` = 'Name'))

原因是CakePHP把原本是字符串一部分的Not看成了操作符,更进一步讲,如果我们在使用find方法的时候,单纯的使用find(array('key' => 'value'))的形式,那么value就有可能被注入,产生问题,解决的方法就是在value里明确的写出操作符,如上面按照目录名的查询应该写成:

$this->Category->find(array('Category.name' => 'LIKE Not Name'));

注意:新版CakePHP推荐把操作符放在Key里,而不是Value里。

对应生成的SQL为:

WHERE `Category`.`name` LIKE 'Not Name'

CakePHP基于数组的find查询方式简单是简单,但是太简陋了。让我总想搞一个自己的框架重新实现一下。

类别:Cakephp | 添加到搜藏 | 浏览() | 评论 (3)
 
最近读者:
 
网友评论:
1
2008年05月16日 星期五 下午 01:09
呵呵, 好长时间不上QQ了,QQ群也没有看, 不知老王的框架想到什么地步了,?
 
2
2008年05月16日 星期五 下午 01:41
To riverbend:框架还是构思中,过两天会写一篇文章来阐述一下我心目中的框架应该是什么样的,实际开发要再等等。
 
4
2008年05月19日 星期一 上午 09:26
等着挑毛病了, 呵呵
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu