如何在执行后立即打印被切除的sql


26

我正在寻找一种可以在之后立即打印执行的sql查询的方法:

$wpdb->query(
                $wpdb->prepare("INSERT 
                                INTO tbl_watchprosite SET 
                                keywords=%s,url_to_post=%s,description=%s,
                                date_captured=%s,crawl_id=%d,
                                image_main=%s,images=%s,brand=%s,
                                series=%s,model=%s,condition=%s,box=%s,
                                papers=%s,year=%s,case_size=%s,status=%s,listed=%s,
                                asking_price=%s,retail_price=%s,payment_info=%s,forum_id=%d",
                                $this->getForumSettings()->search_meta,$element->href,$post_meta['description'],current_time('mysql'),$cid,$post_meta['image_main'],$images,$post_meta[0],$post_meta[1],$post_meta[2],$post_meta[3],$post_meta[4],$post_meta[5],$post_meta[6],$post_meta[7],$status,$post_meta[9],$post_meta[10],$post_meta[11],$this->getForumSettings()->ID)
            );

如果我可以看到查询中正在运行什么值,那将是很好。

谢谢


1
我知道已经为时已晚,但仅供将来参考。您可以在将其传递给查询之前回显prepare语句。肯定会更容易。
Maciej Paprocki '16

Answers:


51

$wpdb对象具有为此设置的一些属性:

global $wpdb;

// Print last SQL query string
$wpdb->last_query
// Print last SQL query result
$wpdb->last_result
// Print last SQL query Error
$wpdb->last_error

注意:首先,您必须define( 'SAVEQUERIES', true );wp-config.phpWordPress的根文件夹中的文件中进行设置。


嗯,但在我的情况下,$ wpdb-> last_query中没有任何内容。
ravisoni

defined( 'SAVEQUERIES', true );在脚本中wp-config.php还是! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true );在脚本中?否则它将无法正常工作。
kaiser

是的,我有,我认为查询根本没有运行,因为没有设置$ wpdb-> last_query。:(
ravisoni

1
然后打开wp_debug,这样您就会收到错误或警告(如果有的话)。
库玛(Kumar)

WordPress数据库错误:[查询为空]
ravisoni

14

我在这里列出了3种方法:

  1. SAVEQUERIES在页脚中使用和打印所有查询
  2. 使用$wpdb->last_query只是最新的查询执行打印,这对于调试功能非常有用。
  3. 使用查询监控器之类的插件。

您需要在wp-config.php中添加它

 define('SAVEQUERIES', true);

然后在主题的页脚中添加以下代码:

 <?php
  if (current_user_can('administrator')){
   global $wpdb;
   echo "<pre>Query List:";
   print_r($wpdb->queries);
   echo "</pre>";
 }//Lists all the queries executed on your page
?>

或者,如果您只想打印最后执行的查询,则可以在$wpdb查询函数调用下方使用它。

global $wpdb;
echo $wpdb->last_query;//lists only single query

第三种方法是使用诸如Query Monitor之类的插件,该插件详细列出了在页面上执行的所有查询,以及与之相关的其他详细信息,例如返回的行数,执行时间或查询速度慢。 http://wordpress.org/plugins/query-monitor/

仅在DEV环境中使用此插件是一个好主意,不应在活动站点上使其保持激活状态。另外,查询监视器有时可能会导致页面问题,例如,如果错误太多,模板/页面上的5XX错误。


如何获得Ajax启动的查询?
itsazzad

您可以在ajax操作处理程序函数中打印相同的内容。
Kumar 2015年


1

我想补充一点,@ kaiser投票最好的答案并不完全正确:

// Print last SQL query string
$wpdb->last_query

它的返回值是ARRAY,而不是字符串。因此,要输出最后一个查询,您应该这样做:

echo 'Last query: '.var_export($wpdb->last_query, TRUE);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.