是否可以将实际SQL查询作为字符串从db_query的结果返回?
否则从db_query获取返回的资源ID并获取SQL字符串?
修改
作为附录,我最近发现了Devel模块中的db_queryd()
,它回应了传递的查询(以及执行它)。不会像这个问题那样返回字符串,但对复制和粘贴完整的查询非常有帮助。
答案 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)));