WordPress-Datenbank-Fehler „Column cannot be null“ beheben


WordPress_phpMyAdmin_LogoBetreibt man eine eigene Webseite, sollte man auch zwischendurch die Logdateien des Webhosting-Servers überprüfen. Nicht jeder Provider stellt eine E-Mail-Benachrichtigung im Falle eines Fehlers zur Verfügung. Eine regelmäßige Kontrolle der ERROR-Logs kann somit hilfreich sein, eine sofortige Maßnahme zu ergreifen um den Fehler zu beseitigen.

Die ERROR-Logs erfassen alle aufgetretenen Fehler im Zusammenhang mit der Webseite. Ist eine Seite zum Beispiel nicht erreichbar, wird eine Meldung ausgegeben, dass sie nicht angezeigt werden konnte, weil die Index-Datei fehlt und der direkte Zugriff auf das Verzeichnis verboten ist.

[Tue Apr 23 20:41:25 2019] [autoindex:error] [pid 13438] [client 47.254.xxx.xxx] [host www.technik-tipps-und-tricks.de] AH01276: Cannot serve directory /is/htdocs/wpXXXXXXXXX_XXXXXXXXXX/www/wp-content/uploads/: No matching DirectoryIndex (index.html,index.htm,index.shtml,index.php,index.php5,index.wml,index.xml) found, and server-generated directory index forbidden by Options directive

In dem Beispiel weiter unten wird die Suche und Behebung eines Datenbankfehlers auf einem HostEurope Webserver beschrieben.

Anzeige

Webserver Logs überprüfen

Die Log-Dateien findet man bei HostEurope nach dem einloggen im KIS unter Produktverwaltung ⇒ WEBHOSTING ⇒ Konfigurieren ⇒ Statistiken & Logfiles ⇒ Laufende ERROR-Logs ansehen.

HostEurope_KIS_Webhosting-Konfigurieren
HostEurope-KIS – Webhosting konfigurieren
HostEurope_KIS_Error-Logfiles
HostEurope-KIS – Error-Logfiles ansehen

Das Webhosting-Error-Log enthält eine Fehlermeldung über eine Datenbank-Tabellenspalte mit dem Namen Time, die keinen NULL-Wert speichern kann.

[Sat Apr 20 02:06:39 2019] [php7:notice] [pid 20095] [client 46.229.xxx.xxx] [host www.technik-tipps-und-tricks.de] WordPress-Datenbank-Fehler Column 'Time' cannot be null f\xc3\xbcr Abfrage INSERT INTO my_blog_vcp_log VALUES (NULL,'46.229.xxx.xxx',NULL) von require('wp-blog-header.php'), require_once('wp-load.php'), require_once('wp-config.php'), require_once('wp-settings.php'), do_action('init'), WP_Hook-]do_action, WP_Hook-]apply_filters, vcp_log_user

Die SQL-Abfrage INSERT INTO my_blog_vcp_log VALUES (NULL,’46.229.xxx.xxx‘,NULL) nennt auch die betroffene Datenbanktabelle (my_blog_vcp_log).

Wie kommt es zu diesem Fehler? Ein Blick in die Datenbankstruktur wäre hier der nächste Schritt.

Datenbanktabellenstruktur anzeigen

Mit phpMyAdmin bei der Webserver-Datenbankadministration anmelden. Die WordPress Datenbanktabelle my_blog_vcp_log, wo der SQL INSERT-Befehl den Fehler versucht, anklicken.

phpMyAdmin-my_blog_vcp_log-table-structure
Die Struktur der my_blog_vcp_log Tabelle

An der dritten Stelle der Tabelle steht die im Fehler-Log erwähnte „Time„-Spalte. Sie ist vom Typ timestamp, erlaubt keine NULL-Werte und standardmäßig soll der aktuelle Zeitstempel eingetragen werden. Und hier liegt das Problem. Die INSERT-Abfrage übergibt laut der Fehlermeldung den Parameter Time mit dem Wert NULL, der nicht erlaubt ist. Aber wo wird diese INSERT-Abfrage erstellt? Die Antwort befindet sich am Ende der Fehlermeldung. Es ist die init-Action-Hook-Funktion vcp_log_user. Leider ist die Stelle der Funktion im Quellcode nicht angegeben. Nach dieser wird jetzt mit dem Notepad++ Editor gesucht.

Funktion in WordPress-Dateien suchen

Zuerst die komplette Webseite mit einem FTP-Client wie FileZilla herunterladen. Schneller geht es wenn man einen Backup auf dem Webserver erstellt, diesen herunterlädt und entpackt.

Notepad++ öffnen und aus der Menüleiste Suchen ⇒ In Dateien suchen … wählen. Die Einstellungen wie auf dem folgenden Bild anpassen und Alle suchen anklicken.

Notepad++_search_in_files
Notepad++ Einstellungen der Suche in Dateien

Wird die gesuchte Funktion gefunden, werden alle Vorkommen aufgelistet.

Notepad++_find_result
Notepad++ Ergebnis der Suche in Dateien

Der Funktionsname kommt zweimal vor in der Plugin-Datei /www/wp-content/plugins/easy-visitor-counter/index.php. In der Zeile 99 ist die gesuchte Funktion definiert und in der Zeile 97 dem init-Hook hinzugefügt. Diese Datei wird jetzt direkt auf dem auf dem FTP-Server im Notepad++ zum Editieren geöffnet.


Anzeige

FileZilla Standardeditor konfigurieren

In FileZilla ⇒ Bearbeiten ⇒ Einstellungen ⇒ Bearbeiten von Dateien Benutzerdefinierten Editor verwenden“ wählen und den Pfad zur notepad++.exe eingeben. Das Häckchen bei „Lokal bearbeitete Dateien beobachten und bei Änderung das Hochladen vorschlagen“ setzen und mit OK speichern.

FileZilla_default_editor_settings
FileZilla – Standardeditor wählen

Webserver-Datei im Notepad++ öffnen

Mit einem Rechtsklick auf die Webserver-Datei /www/wp-content/plugins/easy-visitor-counter/index.php im FileZilla-Fenster das „Ansehen/Bearbeiten“ aus dem Context-Menü wählen.

FileZilla_show_edit_file
FileZilla – Context-Menü „Ansehen/Bearbeiten“

Zu der vcp_log_user-Funktionsdefinition in der Zeile 99 scrollen.

Notepad++_function_found_in_file
Notepad++ Funktion gefunden in der Datei

Wie man sieht, ist der dritte Parameter Time in der SQL-Abfrage auf den Wert NULL festgelegt. Dieser Wert verursacht den Fehler, der mit der Übergabe eines formatierten Zeitstempels behoben wird.

Notepad++_function_changed_in_file
Notepad++ Korrektur der Funktion

Eine andere und einfachste Methode wäre den in der Datenbank definierten Standardwert CURRENT_TIMESTAMP mit der Übergabe vom DEFAULT-Wert auszulösen. Die SQL-Abfrage sollte dann folgend aussehen:

$sqlQuery = "INSERT INTO $table_name VALUES (NULL,'".$_SERVER['REMOTE_ADDR']."',DEFAULT)";

Das gleiche Ergebnis erreicht man mit der explizierten Übergabe der Spaltennamen und ihrer Werte und schließt dabei die betroffene Spalte aus.

$sqlQuery = "INSERT INTO $table_name (LogID, IP) VALUES (NULL,'".$_SERVER['REMOTE_ADDR']."')";

Die geänderte Datei speichern. Wechselt man zum FileZilla-Fenster, wird man gefragt ob die Datei auf den Server hochgeladen werden soll. Mit Ja bestätigen.

FileZilla-upload_file_to_server
FileZilla – Datei auf den Server hochladen

Die Fehlermeldung sollte im ERROR-Log nicht mehr erscheinen.

Anzeige


 

War dieser Beitrag für dich informativ? Hat er dir gefallen oder geholfen?

Dann unterstütze die Weiterentwicklung dieser Webseite mit einer kleinen Spende!

Die Spenden werden für die Lizenzen sowie neue Hard- und Software verwendet, die für weitere Projekte auf dieser Webseite eingesetzt werden. Die Werbung alleine deckt gerade mal die Server Kosten.




Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.