Drupal:从db_query返回SQL字符串

时间:2010-06-29 02:34:31

标签: drupal drupal-6

是否可以将实际SQL查询作为字符串从db_query的结果返回?

否则从db_query获取返回的资源ID并获取SQL字符串?


修改

作为附录,我最近发现了Devel模块中的db_queryd(),它回应了传递的查询(以及执行它)。不会像这个问题那样返回字符串,但对复制和粘贴完整的查询非常有帮助。

7 个答案:

答案 0 :(得分:3)

我认为不是。但是,如果您只是为了调试而这样做,则可以打开devel模块,这将显示运行的查询。

实际上你可以将变量'dev_query'设置为1,然后访问全局数组$ queries,但我不推荐它。

答案 1 :(得分:2)

Drupal 7,如果是debug,你可以在\ includes \ database \ database.inc找到

function query($query, array $args = array(), $options = array())

$ stmt的queryString

print_r($stmt->getQueryString());

答案 2 :(得分:2)

如果您有D7但没有Devel可以使用,下面的代码段可能会有用 - 它可能无法处理每种类型的占位符但是...它目前错误地假设所有占位符都是字符串(其中包含我的用法很好)

function stringify_query( $query ){
  $s = preg_replace('/\}|\{/', '', $query->__toString());
  $a = $query->arguments();
  foreach ( $a as $key => $val ) {
    $a[$key] = '\'' . $val . '\'';
  }
  return strtr($s, $a);
}

它还粗略地删除了用于处理表前缀的Drupal的花括号,如果依赖于表前缀,那么你应该找到正确的Drupal函数来正确替换它们。

答案 3 :(得分:1)

我建议使用devel模块。有一个设置开发项目,它将显示在页面底部生成页面期间运行的所有查询,包括查询执行时间和调用db_query()的函数。如果您对查询的外观或调用它的函数有一个大概的了解,您可以在浏览器中搜索它,并且可以看到实际发送到数据库的内容。

答案 4 :(得分:1)

迟到的答案,但你经常可以转

$result = db_query($query, $arg1, $arg2);

快速进入

drupal_set_message(sprintf($query, $arg1, $arg2), "status");

得到你想要的东西。

如果您使用数组作为db_query的参数,这对您没有帮助,因为sprintf不支持,但在调试工具包中通常很有用。

答案 5 :(得分:0)

对于那些使用Drupal 7.x和Devel模块的人来说,调用将构建的SQL语句输出到drupal消息区域的正确函数是dpq()。它需要传递查询对象。 e.g。

// to see the built SQL
$query = db_select('node', 'n')->fields('n');    
dpq($query);

// to see the results of the query
$results = $query->execute()->fetchAssoc();
dsm($results);

希望能有所帮助!

答案 6 :(得分:0)

带开发的D7版本。

> = PHP 5.4

dpm(str_replace(['{', '}'], '', dpq($query, TRUE)));

< PHP 5.4

dpm(str_replace(array('{', '}'), '', dpq($query, TRUE)));
相关问题