So drucken Sie die excuted sql direkt nach ihrer Ausführung

26

Ich suche nach einer Möglichkeit, mit der ich die ausgeführte SQL-Abfrage direkt nach dem folgenden Befehl drucken kann:

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

Dies wäre toll, wenn ich sehen kann, welche Werte in der Abfrage gehen.

Vielen Dank

Ravisoni
quelle
1
Ich weiß, dass es zu spät ist, aber zum späteren Nachschlagen. Sie können die Anweisung prepare einfach als Echo ausgeben, bevor Sie sie an die Abfrage übergeben. Es wäre sicherlich einfacher.
Maciej Paprocki

Antworten:

51

Das $wpdbObjekt hat einige Eigenschaften, die dafür gesetzt werden:

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

Hinweis: Zunächst müssen Sie define( 'SAVEQUERIES', true );in Ihrer wp-config.phpDatei den Stammordner von WordPress festlegen .

Kaiser
quelle
hmm aber in meinem fall ist nichts in $ wpdb-> last_query.
Ravisoni
Hast du defined( 'SAVEQUERIES', true );in deinem wp-config.phpoder so etwas wie ! defined( 'SAVEQUERIES' ) AND defined( 'SAVEQUERIES', true );in deinem Drehbuch? Sonst klappt es nicht.
Kaiser
Ja, ich habe, ich denke, die Abfrage läuft überhaupt nicht, und es gibt keine Einstellung für $ wpdb-> last_query. :(
Ravisoni
1
Schalten Sie dann wp_debug ein, damit dort Fehler oder Warnungen angezeigt werden.
Kumar
WordPress-Datenbankfehler: [Abfrage war leer]
Ravisoni
14

Ich habe hier drei Ansätze aufgelistet:

  1. Verwenden SAVEQUERIESund Drucken aller Abfragen in der Fußzeile
  2. Wenn Sie $wpdb->last_querynur die zuletzt ausgeführte Abfrage drucken, ist dies für Debugging-Funktionen hilfreich.
  3. Verwendung eines Plugins wie Query Monitor.

Sie müssten dies in Ihrer wp-config.php hinzufügen

 define('SAVEQUERIES', true);

Dann fügen Sie in der Fußzeile Ihres Themas diesen Code hinzu:

 <?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
?>

Wenn Sie nur die zuletzt ausgeführte Abfrage drucken möchten, können Sie diese direkt unter Ihrem $wpdbAbfragefunktionsaufruf verwenden.

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

Ein dritter Ansatz wäre, ein Plugin wie Query Monitor zu verwenden, das alle auf einer Seite ausgeführten Abfragen im Detail auflistet und andere damit verbundene Details wie die Anzahl der zurückgegebenen Zeilen und die Ausführungszeit oder wenn es sich um eine langsame Abfrage handelt. http://wordpress.org/plugins/query-monitor/

Es ist eine gute Idee, dieses Plugin nur in der DEV-Umgebung zu verwenden und sollte nicht auf einer Live-Site aktiviert bleiben. Außerdem kann der Abfragemonitor manchmal Probleme mit Ihrer Seite verursachen, z. B. 5XX-Fehler auf Ihrer Vorlage / Seite, wenn zu viele Fehler vorliegen.

Kumar
quelle
Wie bekomme ich von Ajax eingeleitete Anfragen?
itsazzad
Sie können dasselbe in der Ajax-Action-Handler-Funktion drucken.
Kumar
3

Sie müssen beide Funktionen hinzufügen, sonst wird kein Fehler angezeigt

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

Diese Funktion zeigt Ihnen den richtigen Fehler wie diesen

Bildbeschreibung hier eingeben

Ketan Chaudhari
quelle
1

Ich wollte hinzufügen, dass die beste Antwort von @kaiser nicht ganz richtig ist:

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

Die Rückkehr davon ist ARRAY , keine Zeichenfolge. Um die letzte Abfrage auszugeben, sollten Sie dies tun:

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