#1 jake
在SpeedPHP框架的数据库查询操作中,条件(where)为OR、LIKE或者IN的时候,可以通过find/findAll的方法来查询:
使用find/findAll
在find/findAll函数的参数里面,第一个参数$condition可以为字符串格式,代表了WHERE后面的条件。举例:
在英文单词表中,模糊查询关键字为“be”的英文单词:
$g->findAll(" word like '%be%'");
查询用户ID是12,13,15多个ID的用户
$g->findAll(" uid in( 12, 13, 15 ) ");
查询用户名中带“c”字母的用户或者ID是24,43,72的用户
$g->findAll(" uid like '%c%' OR uid in( 24, 43, 72 ) ");
注意提交参数安全
在使用字符串格式为查询条件的时候,需要注意字符串中的提交参数并无经过SQL过滤,需要自行通过spModel的escape函数来进行过滤。
和字符串作为查询条件不同,用数组作为find/findAll的查询条件的时候,spModel会自动过滤数组中的值,防止SQL注入。
假设$this->spArgs('q')是提交的模糊查询关键字:
$g = spClass('m_articles');
$q = $g->escape('%', $this->spArgs('q') .'%' );
$results = $g->findAll(" title like $q ");// 由于escape或自动加入单引号,所以这里$q不需要引号
echo $g->dumpSql();
从上面例子可以学习到如何使用escape来过来提交数据,并且在模糊查询的情况如何构造查询条件。
2012-08-04 17:03:06