我正在寻找一种可以在:

$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)
            );


之后打印执行的sql查询的方法,如果我可以看到查询。

感谢

评论

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

#1 楼

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

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

// Print last SQL query result
echo $wpdb->last_result;

// Print last SQL query Error
echo $wpdb->last_error;

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

评论


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

– ravisoni
13年8月16日在11:11

您是否定义了('SAVEQUERIES',true);在您的wp-config.php或类似的东西中! define('SAVEQUERIES')和define('SAVEQUERIES',true);在您的脚本中?否则它将无法正常工作。

– kaiser
13年8月16日在11:32

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

– ravisoni
13年8月16日在11:36

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

–库马尔
13年8月16日在11:38

我知道您的原始查询来自很久以前,但是听起来像您遇到了列大小问题。仅针对正在寻找无查询结果且无错误的解决方案的任何其他人-警告,当查询中的列超出数据库中列的大小时,wpdb会以无提示或错误的方式静默退出。几乎没有办法看到这种情况的发生,并且WordPress一直对此进行粗心的抵抗(IMHO)。您可以在开发环境中将简短的补丁放入wpdb.php中,以使查看起来更加容易。

– Brian B
19/12/22在6:19

#2 楼

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


使用SAVEQUERIES并在页脚中打印所有查询
使用$wpdb->last_query仅打印执行的最新查询,这对于调试非常有用函数。
使用查询监视器之类的插件。

您需要将其添加到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
2015年9月18日上午11:36

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

–库马尔
2015年9月18日15:56

#3 楼

您必须同时添加两个函数,否则它将永远不会显示错误

$wpdb->show_errors(); 
$wpdb->print_error();


此函数将向您显示这样的正确错误



#4 楼

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

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


它的返回值是ARRAY,而不是字符串。因此,要输出最后一个查询,您应该执行以下操作:

echo 'Last query: '.var_export($wpdb->last_query, TRUE);