查看文章 |
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查询方式简单是简单,但是太简陋了。让我总想搞一个自己的框架重新实现一下。 |
最近读者: