2015-05-07 15 views
8

Kontext

Ich habe an einem neuen Wordpress Blog als persönliche Website gearbeitet. Teil davon habe ich ein benutzerdefiniertes Kontaktformular, wo Leute ihre Details eingeben, um in Kontakt mit mir zu kommen. Es hat gut gearbeitet bis zum Morgen, nach dem ich auf 4.2.2v aus Sicherheitsgründen aktualisiert habe.Wordpress 4.2.2 update - failing wpdb-> Einfügen

Problem

Nach dem Update wird die Form eine der Informationen in die DB speichern scheitern. Die $wpdb->insert_id gibt 0 zurück. Die Abfrage ist die gleiche, die Seite ist die gleiche, alles ist gleich. Die einzige Änderung ist, dass ich von 4.2.1v auf 4.2.2v aktualisiert habe.

Gibt es ein Problem mit dem letzten Update oder muss ich weitere Schritte nach dem word press manual update tun?

Debuggen getan ...

Ich habe dafür gesorgt, dass die DB-Version aktualisiert wird. Es ist 31535. zeigt, wenn das Debuggen des $wpdb->lastquery und $wpdb->print_error() ich mit bekommen

WordPress database error: [] 
SHOW FULL COLUMNS FROM `wp_tst_tbl_contacts` 

?

Ich konnte nicht verstehen, was hier falsch ist. Wenn ich dieselbe Einfügeabfrage sowie die obige show full columns auf der Befehlszeile unter Verwendung der gleichen Benutzer wp Benutzeranmeldeinformationen ausführen, funktioniert es einwandfrei.

Hinweis: Wenn weitere Informationen benötigt werden, fragen Sie bitte.

Antwort

15

Ich fand die Ursache des Problems. Es ist aufgrund einer Begrenzung der Spaltenbreite.

Ich habe eine VARCHAR (9) Spalte und ich habe Daten gesendet, die 16 Zeichen lang ist. Die neue Änderung in 4.2.2 ruft die Tabelle meta ab und schneidet die Daten so aus, dass sie in die Größe der Spalte passt, die in der Datenbank definiert ist. Und es vergleicht auch die Pre-Crop- und Post-Crop-Daten. Wenn sie nicht übereinstimmen, schlägt sie fehl.

Das Problem ist, es stumm im Hintergrund ohne Fehler ausgelöst. Ich habe das über das Debuggen der wpincludes/wp-db.php-Datei gefunden.

Bitte überprüfen Sie Ihr Spaltenlimit und die von Ihnen gesendete Spaltendatenlänge.

Sobald ich die Spaltenbreite erhöht habe (da die Daten definitiv mehr als 9 Zeichen sein werden), wurde das Problem gelöst.

+1

Vielen Dank! Sie sollten das im Changelog haben. Es hat einige Funktionen unserer Website zerstört und wir konnten nicht herausfinden warum, weil wir nichts geändert haben. Sie verdienen mehr upvotes :) https://codex.wordpress.org/Version_4.2.2 –

+2

Es gibt keinen Grund wordpress muss Stringlängen überprüfen, wenn MySQL perfekt in der Lage ist, Einsätze für Sie zu schneiden. Um stillschweigend zu versagen, ist ein schrecklicher Fehler bei WordPress-Fehlern. Danke, dass du herausgefunden hast warum! –

+0

Dieser Fehler tritt auch auf, wenn Ihr benutzerdefinierter post_type größer als 20 Zeichen ist (Standardgröße der post_type-Spalte). –

2

Ich hatte das gleiche Problem und es stellte sich heraus, dass einige nicht skalierte Werte von einer CSV-Importfunktion in die Datenbank geschoben wurden.

I angewandt, um die richtigen esc_url() und/oder esc_attr() und/oder esc_html() gegebenenfalls die Werte vor dem Einsetzen zu sterilisieren und dann die Abfrage erfolgreich ausgeführt wird.