WordPress SQL-Queries debuggen

Es gibt verschiedene Möglichkeiten, Probleme mit WordPress SQL-Queries zu untersuchen. Nachfolgend sind die wichtigsten Wege beschrieben.

Debugging aktivieren

Zunächst muss der Debug-Mode aktiviert werden. Dazu die wp-config.php wie folgt anpassen:

define( 'WP_DEBUG', true ); // enables debugging
define( 'WP_DEBUG_LOG', true ); // write debug informations to /wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); // do not display debug informations

Achtung: Unter allen umständen sollte man vermeiden, WP_DEBUG_DISPLAY in produktiven Umgebungen auf true zu setzen. Debugging-Informationen können sensible Daten enthalten, die nicht für die Augen von Besuchern gedacht sind!

Query Debugging

$wpdb bietet zwei Methoden, um das Debugging von Queries zu aktivieren oder zu deaktivieren:

global $wpdb;
$wpdb->show_errors(); // shows error messages
// or
$wpdb->hide_errors(); // hide error messages

$wpdb->insert(...);

Achtung: $wpdb->show_errors() zeigt Fehlermeldungen auch dann an, wenn WP_DEBUG auf false gesetzt ist! Aus diesem Grund sollte immer auch eine Prüfung auf WP_DEBUG eingefügt werden:

global $wpdb;

if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
    $wpdb->show_errors();
}

Um einen etwaigen Fehler auszugeben kann man folgenden Befehl nutzen:

$wpdb->print_error();

Dieser Befehl prüft, ob im letzten Query ein Fehler vorkam und gibt diesen aus.

Wichtig ist auch zu wissen, dass $wpdb->insert() false zurückgibt, wenn ein Fehler aufgetreten ist:

global $wpdb;
if ( !$wpdb->insert() ) {
    echo "there was an error";
}

Alle Queries

Um alle Queries zu erhalten / zu sehen, die von WordPress ausgeführt werden, muss SAVEQUERIES in der wp-config.php auf true gesetzt werden.

define( 'SAVEQUERIES', true );

Nun werden alle Queries im Array $wpdb->queries vorgehalten. Um alle Queries auszugeben hilft beispielsweise folgender Code:

if ( current_user_can( 'administrator' ) ) {
    global $wpdb;
    echo "<pre>";
    print_r( $wpdb->queries );
    echo "</pre>";
}

Häufiges Problem

Was, wenn keine Fehlermeldung erscheint, ein Eintrag jedoch trotzdem nicht eingefügt wird? Ein häufiges Problem ist, dass die einzufügenden Daten ungültige Zeichen enthalten oder die Daten schlichtweg zu lange sind. Angenommen ein Feld ist vom typ varchar(50) und ein String mit 60 Zeichen länge soll eingefügt werden, dann erscheint kein Fehler! Aus diesem Grund immer darauf achten, welche Daten eingefügt werden sollen und ob diese Daten so auch eingefügt werden können.

Multisite

Noch ein Hinweis zur Nutzung von Multisite. Damit Query Debugging funktioniert muss DIEONDBERROR in der wp-config.php aktiviert werden:

define( 'DIEONDBERROR', true );

Schreibe einen Kommentar