虽然系统已经将数据库操作进行了OOP封装,完善的CURD操作及表达式能够满足大部分需求,但还不能完全代替传统的SQL语言,尤其在一些复杂的SQL查询中,所以系统也提供了传统的SQL语言查询。在Model模型中,有3种方式可以使用原生的SQL语言,下面分别进行介绍1、query方法query方法的使用比较简单和直观,接受的参数即为完整的SQL语句。这里所说的SQL语句是带完整数据表名的(包含前缀)查询语言。query方法返回的结果是一个数据集,可以直接分配到模版中,如以下代码所示
直接使用query方法执行SQL语句需要给出完整的数据表名,这时DB_PREFIX配置文件中的配置项就变得毫无作用了,如果数据表前缀一旦变更,就会给代码睡欧维护带来严重的困难。这里可以使用两种方式进行解决:一种直接用使用C函数获取DB_PREFIX表前缀,以变量的方式替换SQL语句中的数据表明称;另外一种是将当前动作名或方法名改成与数据表名相同,在SQL语句中使用__TABLE__替换符进行替换。使用原生SQL语句后,所有的参数入口需要手动过滤,常用的过滤函数有mysql_escape_string、addslashes、escapeshellarg等。2、execute方法execute方法和query方法是一样的,使用方式也一样,唯一不同的是execute方法不会返回数据集,也不会返回受影响行数,甚至连错误信息都不返回。通常情况下query用于获取数据,execute方法用于后台插入、更新数据。如以下代码所示
原声带SQL语句建议只用于一些特殊的操作,因为原生的SQL语句是有一定的局限性的,比如部署多数据库应用时,需要处理各种数据SQL语绵槐言之间的差异。此外,使用原生的SQL查询需要读者手动进行查询缓存(exp表达式除外)。