#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