首页 理论教育使用原生SQL语言实战

使用原生SQL语言实战

【摘要】:在Model模型中,有3种方式可以使用原生的SQL语言,下面分别进行介绍。这里所说的SQL语句是带完整数据表名的查询语言。原生的SQL语句建议只用于一些特殊的操作,因为原生的SQL语句是有一定的局限性的,比如部署多数据库应用时,需要处理各种数据库SQL语言之间的差异。此外,使用原生的SQL查询需要读者手动进行查询缓存。

虽然系统已经将数据库操作进行了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方法(www.chuimin.cn)

execute方法和query方法是一样的,使用方式也一样,唯一不同的是execute方法不会返回数据集,也不会返回受影响行数,甚至连错误信息都不返回。通常情况下query用于获取数据,execute方法用于后台插入、更新数据。如以下代码所示。

3.exp操作表达式

exp操作表达式是介于CURD表达式与传统SQL之间的一种查询方式,为这两种方式找到了一个平衡点。在exp表达式中,开发人员可以完全使用标准的SQL语句(where部分)进行数据操作,包括查询、更新、删除等,如以下代码所示。

原生的SQL语句建议只用于一些特殊的操作,因为原生的SQL语句是有一定的局限性的,比如部署多数据库应用时,需要处理各种数据库SQL语言之间的差异。此外,使用原生的SQL查询需要读者手动进行查询缓存(exp表达式除外)。