Es gibt verschiedene Wege, Probleme mit SQL-Statements innerhalb von WordPress zu untersuchen / debuggen. Die relevantesten Methoden habe ich nachfolgend aufgezeigt.
Im ersten Schritt muss der Debug Mode aktiviert werden. Dies kann über die nachfolgenden Einträge in der wp-config.php
durchgeführt werden:
define( 'WP_DEBUG', true ); // Debugging aktivieren
define( 'WP_DEBUG_LOG', true ); // Debug-Informationen nach /wp-content/debug.log schreiben
define( 'WP_DEBUG_DISPLAY', false ); // Debug-Informationen nicht anzeigen
ACHTUNG: WP_DEBUG_DISPLAY
sollte unter keinen Umständen auf produktiv genutzten Websites aktiviert werden. Debug-Informationen können schützenswerte Daten enthalten. Die Ausgabe dieser Informationen stellt ein enormes Sicherheitsrisiko dar! Auch das debug.log muss entsprechend geschützt werden, da es öffentlich einsehbar ist!
$wpdb
bietet zwei Methoden, das Query-Debugging zu aktivieren und zu deaktivieren:
global $wpdb;
$wpdb->show_errors(); // Gibt Fehlermeldungen aus
// oder
$wpdb->hide_errors(); // Versteckt Fehlermeldungen
$wpdb->insert(...);
ACHTUNG: $wpdb->show_errors() gibt Fehlermeldungen auch dann aus, wenn WP_DEBUG
auf false
gesetzt ist! Aus diesem Grund sollte immer folgendes Statement genutzt werden:
global $wpdb;
if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
$wpdb->show_errors();
}
Um einen Fehler auszugeben kann folgender Befehl genutzt werden:
$wpdb->print_error();
Dieser Befehl prüft, ob beim Ausführen des letzten SQL-Statements ein Fehler aufgetreten ist und zeigt diesen an.
Es ist auch wichtig zu wissen, dass $wpdb->insert()
false
zurückgibt, wenn ein Fehler aufgetreten ist:
global $wpdb;
if ( !$wpdb->insert() ) {
echo "Ein Fehler ist aufgetreten";
}
Um alle SQL Queries angezeigt zu bekommen, die WordPress ausgeführt hat, muss SAVEQUERIES
aktiviert werden:
define( 'SAVEQUERIES', true );
Nun werden alle Queries in das Array $wpdb->queries
geschrieben. Der nachfolgende Code gibt diese aus:
if ( current_user_can( 'administrator' ) ) {
global $wpdb;
echo "";
print_r( $wpdb->queries );
echo "";
}
In diesem Artikel ist beschrieben, wie die Queries geloggt werden können.
Was, wenn keine Fehlermeldung auftaucht, aber trotzdem kein Eintrag in die Datenbank geschrieben wird? Ein gängiges Problem ist, dass die Daten, die in die Datenbank geschrieben werden sollen, ein oder mehrere ungültige Zeichen enthalten. Angenommen es gibt ein Feld in der Datenbank vom Typ varchar(50)
und ein String mit 60 Zeichen soll eingefügt werden, dann scheitert dies ohne Fehlermeldung! Aus diesem Grund sollte vor Ausführung von Insert-Statements immer geprüft werden, ob die Daten den Anforderungen entsprechen.
Abschließend noch eine Information zu WordPress Multisites. Um Queries Debugger zu können muss die Konstante DIEONDBERROR
in der wp-config.phpauf
true` gesetzt werden:
define( 'DIEONDBERROR', true );