Cum obții mesajele de eroare când $wpdb->insert() returnează false?
$wpdb->insert()
returnează false
, ceea ce înseamnă că inserarea a eșuat. Acum, aș dori să știu de ce eșuează inserarea.
Conform acestui tichet https://core.trac.wordpress.org/ticket/32315 problema ar putea fi că valoarea este fie prea lungă, fie conține caractere invalide.
Iată interogarea de inserare:
$result = $wpdb->insert('table', $ins_args, array('%d', '%d', '%s', '%s', '%s', '%s'));
Este dificil să arăt valorile array-ului $ins_args
deoarece unele valori sunt destul de lungi. În special cea pentru câmpul numit value
. Dar folosesc tipul longtext
pentru acel câmp. Și această inserare este folosită frecvent. Și de cele mai multe ori funcționează cu succes. Deci pare într-adevăr o problemă de codare sau dimensiune.
Cum pot afla care este problema? $wpdb->last_error
este gol

Metoda $wpdb->insert()
returnează false
dacă rândul nu a putut fi inserat. În caz contrar, returnează numărul de rânduri afectate (care va fi întotdeauna 1).
Puteți activa sau dezactiva afișarea erorilor cu show_errors
și hide_errors
, respectiv.
<?php $wpdb->show_errors(); ?>
<?php $wpdb->hide_errors(); ?>
De asemenea, puteți afișa eroarea (dacă există) generată de cea mai recentă interogare cu print_error
.
<?php $wpdb->print_error(); ?>
Puteți folosi și câmpul $last_error
, care va conține textul celei mai recente erori generate de MySQL.

Ar fi bine să vedem un exemplu al câmpului $last_error
. Este doar $wpdb->last_error
?

Rețineți că, dacă o scriere este întreruptă din cauza unei coloane prea lungi, nu este returnată nicio eroare. Adică, $wpdb->last_error
va fi gol, iar nici $wpdb->show_errors()
și nici $wpdb->hide_errors()
nu vor ajuta. Consultați răspunsul meu de mai jos pentru o metodă de a modifica acest comportament.

Din păcate, wp-db.php
returnează false fără nicio eroare, dacă datele pe care încercați să le scrieți într-o coloană sunt prea lungi pentru a încăpea. Acest lucru devine un coșmar de depanat fără a verifica în mod explicit lungimea fiecărei coloane (și este greu de știut lungimile, deși wp-db.php oferă funcții interne pentru aceasta).
Am creat o mică suprascriere care modifică comportamentul wpdb pentru a returna o eroare în acest scenariu. Pentru a o instala, trebuie doar să copiați și să lipiți codul în fișierul WordPress wp-content/db.php. Aceasta suprascrie doar o singură metodă scurtă din wpdb (process_fields()
) pentru a adăuga un mesaj de eroare care identifică coloana care este prea lungă. Rețineți că db.php va supraviețui actualizărilor de nucleu și puteți elimina fișierul wp-content/db.php în orice moment pentru a reveni la wpdb original.
Deși folosesc acest lucru personal, ca de obicei, testați înainte de utilizare și folosirea este pe propria răspundere.
Codul de eroare este preluat inițial dintr-o idee a lui Liam Murphy aici.

În sfârșit rezolvat în WordPress v5.9. https://core.trac.wordpress.org/ticket/32315#comment:82
