欢迎各位兄弟 发布技术文章
这里的技术是共享的
Drupal 7 为开发人员提供了一种用于生成数据库查询的平台中立格式。如果您是Drupal 开发人员,您可能需要查看 Drupal 生成的实际 SQL 查询以进行调试和测试。如果您想知道在 Drupal 7 中使用 db_select 时如何打印带参数的 SQL 查询,请继续阅读以找出解决方案。
通常我们在 Drupal 6 和 7 中使用 dpm() 来打印字符串和查询。但是如果我们需要执行查询以进行调试,dpm() 将只打印没有那么有用的对象。dpq() 用于打印带有实际参数的查询字符串的情况。dpq() 函数在 Drupal 开发模块中可用。
dpq($query, $return = FALSE, $name = NULL)
$query:一个实现 SelectQueryInterface 的对象。
$return:是否返回字符串。默认值为 FALSE。
$name:用于标识输出的可选名称。
返回值: $query 对象,如果 $return 为 TRUE,则为查询字符串。
function dpq($query, $return = FALSE, $name = NULL) { if (user_access('access devel information')) { $query->preExecute(); $sql = (string) $query; $quoted = array(); $connection = Database::getConnection(); foreach ((array) $query->arguments() as $key => $val) { $quoted[$key] = $connection->quote($val); } $sql = strtr($sql, $quoted); if ($return) { return $sql; } dpm($sql, $name); } return ($return ? NULL : $query); }
$query = db_select('uc_zones', 'uz'); $query->join('uc_countries', 'uc', 'uz.zone_country_id = uc.country_id'); $query->fields('uz', array('zone_code', 'zone_name')); $query->fields('uc', array('country_name')); $query->condition('zone_country_id', array(840, 124), 'IN'); $query->orderBy('country_id', 'DESC'); $query_result = $query->execute();
在这种情况下,如果我想查看具有实际值的查询,则使用 dpq 是唯一的方法。这是上述查询的 dpq 输出。
似乎 执行 dpq (例如 var_dump(dpq(clone $query));exit; )后,刷新下 才能看到drupal_set_message的结果
SELECT uz.zone_code AS zone_code, uz.zone_name AS zone_name, uc.country_name AS country_name FROM {uc_zones} uz INNER JOIN {uc_countries} uc ON uz.zone_country_id = uc.country_id WHERE (zone_country_id IN ('840', '124')) ORDER BY country_id DESC
希望这篇文章有帮助。请记住将您的查询作为评论发布。
参考:http : //api.drupal.org/api/devel/devel.module/function/dpq/7