Es gibt verschiedene Möglichkeiten, Probleme mit SQL-Statements innerhalb von WordPress zu untersuchen und zu debuggen. Hier sind die wichtigsten Methoden zusammengefasst:
Debugging aktivieren
Der erste Schritt beim Debuggen besteht darin, den Debug-Modus zu aktivieren. Dies erfolgt über die wp-config.php
mit folgenden Einträgen:
define( 'WP_DEBUG', true ); // Aktiviert Debugging
define( 'WP_DEBUG_LOG', true ); // Schreibt Debug-Informationen in /wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); // Verhindert die Anzeige von Debug-Informationen
WICHTIG: WP_DEBUG_DISPLAY
sollte auf produktiven Websites nie aktiviert sein, da dies sensible Informationen preisgeben kann. Das debug.log sollte ebenfalls geschützt werden, um den Zugriff auf Debug-Informationen durch Unbefugte zu verhindern.
Query-Debugging
Mit $wpdb
stehen dir Funktionen zur Verfügung, um das Debugging von SQL-Queries zu steuern:
global $wpdb;
$wpdb->show_errors(); // Zeigt Fehlermeldungen für SQL-Queries an
// oder
$wpdb->hide_errors(); // Verbirgt Fehlermeldungen
WICHTIG: $wpdb->show_errors()
zeigt Fehlermeldungen auch an, wenn WP_DEBUG
auf false
gesetzt ist. Daher sollte diese Methode nur in Kombination mit der Überprüfung des Debug-Modus verwendet werden:
global $wpdb;
if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
$wpdb->show_errors();
}
Um einen SQL-Fehler explizit auszugeben, kannst du folgenden Befehl nutzen:
$wpdb->print_error();
Dieser prüft, ob beim letzten SQL-Statement ein Fehler aufgetreten ist.
Beim Aufruf von $wpdb->insert()
gibt die Methode false
zurück, falls ein Fehler auftritt:
global $wpdb;
if ( !$wpdb->insert() ) {
echo "Ein Fehler ist aufgetreten";
}
Alle Queries einsehen
Um alle von WordPress ausgeführten SQL-Queries zu betrachten, aktiviere SAVEQUERIES
:
define( 'SAVEQUERIES', true );
Dadurch werden alle Queries im Array $wpdb->queries
gespeichert. Um diese Daten anzuzeigen:
if ( current_user_can( 'administrator' ) ) {
global $wpdb;
echo "<pre>";
print_r( $wpdb->queries );
echo "</pre>";
}
In diesem Artikel findest du weitere Informationen dazu, wie du Queries loggen kannst.
Häufiges Problem
Wenn kein Eintrag in die Datenbank geschrieben wird, obwohl keine Fehlermeldung auftritt, könnten ungültige Daten die Ursache sein. Bei einem varchar(50)
Feld und einem String mit 60 Zeichen wird der Eintrag fehlschlagen, ohne eine Fehlermeldung. Daher sollten Daten vor dem Insert-Statement geprüft werden.
Multisite
Für die Fehlersuche in WordPress Multisites muss die Konstante DIEONDBERROR
in der wp-config.php
aktiviert werden:
define( 'DIEONDBERROR', true );
Diese Einstellungen helfen dabei, SQL-Probleme effizient zu identifizieren und zu beheben.