drupal静态查询

论坛: 

在drupal中最常见的就是静态查询,静态查询就是直接执行sql语言进行数据库查询。
我们只推荐简单的数据库查询使用静态查询,复杂,或者消耗性能的查询语句应该使用动态查询。
在 Drupal 7 中,db_query() 接受三个参数,第一个为 SQL 语句,第二个是一组查询值,第三个是数据库连接的一些设置,大致类似于:

db_query('SELECT * FROM {system} WHERE filename = ?', array('system'));

在语句中的占位符,不再需要考虑是字符串或是数字,可以完全用 ? 号表示,后面的查询值是一个索引数组,顺序必须与前面的占位符一致,个数也必须相同。很多时候,语句较为复杂,可能需要许多占位符,全用 ? 号,显得混乱,可以这样来让代码更清晰:

db_query('SELECT * FROM {system} WHERE filename = :name OR type = :theme', array(':name' => 'system', ':theme' => 'theme'));

这时候,第二个参数必须是一个关联数组,占位符即是数组键名。这些占位符是完全自定义的,你可以使用你喜欢的“合法”字符。这条语句中很清楚的表明,
%d、%s 这些占位符不存在了,被 ? 或自定义的占位符取代了。为什么呢?在 drupal 6 中,%d、%s 是用来定义传入值的类型,然后
Drupal 数据库层做出相应的类型检查。而在 Drupal 7中,PDO
将检查传入值的合法性,不需要程序来实现,所以,那些占位符,也光荣退休了。我觉得这一点会提升一些性能,毕竟程序来做检查,比 PHP
底层来检查,来得慢一些。

在drupal7,8中,db_query()接受三个参数,依次是:查询语句,参数、查询设置。

查询设置我们一般是不会遇到的,除非你想要修改一些默认的设置,比如想要使用一个新的数据库链接,想要返回另外一种形式的结果级。drupal7,8支持
多个数据库链接,这些都在站点的settings.php文件中树枝,数据库信息为一个数组,键名就是数据链接的标识,例
如:$databases['default']就是默认的链接。看下面的例子:

<?php
$attributes = array(
'target' => 'mynewdata', // 数据库连接标识
'fetch' => PDO::FETCH_ASSOC, // 返回的结果集类型
);
db_query('SELECT * FROM {system} WHERE filename = :name OR type = :theme', array(':name' => 'system', ':theme' => 'theme'), $attributes);
?>

设置了标识为mynewdata的数据连接,设置返回结果集为关联数组。
drupal静态查询总结
静态查询通过db_query()语句完成。
只有简单的查询才推荐使用静态查询。
静态查询db_query()函数只接受三个参数“sql语言,查询替换值,数据库连接设置”。
drupal7,8默认返回结果集为对象,因此这样取回结果:

<?php
if($result = db_query('SELECT filename, type FROM {system}')){
foreach($result as $o){
echo $o->filename;
}
}
?>

关于文章采用了drupal中国的一些内容,因为转载者只注明是drupal中国,所以我也不知所踪。