実行された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
遅すぎることはわかっていますが、今後の参考のために。クエリに渡す前に準備文をエコーするだけです。確かに簡単でしょう。
マチェイPaprocki

回答:


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

注:まず、WordPressのルートフォルダーにあるファイルに設定define( 'SAVEQUERIES', true );する必要がwp-config.phpあります。


うーん、しかし私の場合、$ wpdb-> last_queryには何もありません。
-ravisoni

あなたは持っているdefined( 'SAVEQUERIES', true );あなたにwp-config.phpまたはのようなもの! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true );スクリプトでは?それ以外の場合は動作しません。
カイザー

はい、あります。クエリがまったく実行されていないと思いますが、設定は$ wpdb-> last_queryです。:(
ravisoni

1
次にwp_debugをオンにして、エラーまたは警告があればそれを取得します。
クマール

WordPressデータベースエラー:[クエリが空でした]
-ravisoni

14

ここに3つのアプローチをリストアップしました:

  1. SAVEQUERIESフッターのすべてのクエリを使用して印刷する
  2. $wpdb->last_query実行された最新のクエリのみを印刷するために使用すると、これは関数のデバッグに役立ちます。
  3. Query Monitorなどのプラグインを使用します。

これを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

3番目のアプローチは、ページで実行されたすべてのクエリを詳細に一覧表示するクエリモニターのようなプラグインを使用することです。 http://wordpress.org/plugins/query-monitor/

このプラグインはDEV環境でのみ使用することをお勧めします。ライブサイトでアクティブのままにしないでください。また、クエリモニターは、エラーが多すぎる場合にテンプレート/ページの5XXエラーのように、ページに問題を引き起こすことがあります。


Ajaxで開始されたクエリを取得する方法は?
itsazzad

ajaxアクションハンドラー関数で同じものを印刷できます。
クマール

3

両方の機能を追加する必要があります。追加しないと、エラーは表示されません。

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

この関数は、このような適切なエラーを表示します

ここに画像の説明を入力してください


1

私は、@ kaiserによる最高の投票結果が完全に正しくないことを付け加えました。

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

その戻り値は、文字列ではなくARRAYです。したがって、最後のクエリを出力するには、これを行う必要があります。

echo 'Last query: '.var_export($wpdb->last_query, TRUE);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.