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?
Simon East
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.
Brian C
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
Bence Szalai