Perché $ wpdb-> show_errors () e print_error () mostra un output anche se l'output della query è corretto?
1 risposta
- voti
-
- 2015-02-23
L'output che haipubblicato sopra èil comportamentoprevistoper
$wpdb->print_error()
se quanto segue è vero -- Staigestendo un sito singolo,nonmultisito
-
$wpdb->suppress_errors
èimpostato sufalse -
$wpdb->show_errors
èimpostato sufalse
Dall'aspetto deltuo codice,soddisfitutte queste condizioni.
Nota anche che,ameno chetunon li abbia disattivati inprecedenza,
$wpdb->show_errors
èimpostato sutrue
perimpostazionepredefinita,quindinon ènecessario chiamare$wpdb->show_errors()
.Perprodurre qualcosa solo quando c'è unerrore di DBpuoifare una di queste due cose -
1 - Visualizza l'erroree aggiungi l'errore al registro
Oltre all'output sullo schermo,ilmetodo
$wpdb->print_error()
registreràiltuoerrore. Se questo è un comportamento desiderabile (consigliato),puoifarlo -if($wpdb->last_error !== '') : $wpdb->print_error(); endif;
2 - Visualizza l'erroremanon lo registra
Senon seiinteressato a registrare l'errore,puoi aggiungere latuafunzione
my_print_error()
e usarla alposto di$wpdb->print_error()
-function my_print_error(){ global $wpdb; if($wpdb->last_error !== '') : $str = htmlspecialchars( $wpdb->last_result, ENT_QUOTES ); $query = htmlspecialchars( $wpdb->last_query, ENT_QUOTES ); print "<div id='error'> <p class='wpdberror'><strong>WordPress database error:</strong> [$str]<br /> <code>$query</code></p> </div>"; endif; }
Ultimamodifica:errore di sintassi
The output that you posted above is expected behaviour for
$wpdb->print_error()
if the following is true -- You are running a single site, not multisite
$wpdb->suppress_errors
is set to false$wpdb->show_errors
is set to false
From the looks of your code, you meet all those conditions.
Note also that, unless you have turned them off previously,
$wpdb->show_errors
is set totrue
by default, so you don't need to call$wpdb->show_errors()
.To output something only when there is a DB error you can do one of these two things -
1 - Output the error and add the error to the log
As well as outputting on the screen, the
$wpdb->print_error()
method will log your error. If this is desirable behaviour (recommended), you can do this -if($wpdb->last_error !== '') : $wpdb->print_error(); endif;
2 - Output the error but do not log it
If you are not interested in logging the error, you can add your own
my_print_error()
funciton and use that instead of$wpdb->print_error()
-function my_print_error(){ global $wpdb; if($wpdb->last_error !== '') : $str = htmlspecialchars( $wpdb->last_result, ENT_QUOTES ); $query = htmlspecialchars( $wpdb->last_query, ENT_QUOTES ); print "<div id='error'> <p class='wpdberror'><strong>WordPress database error:</strong> [$str]<br /> <code>$query</code></p> </div>"; endif; }
Last Edit: Syntax Mistake
-
Ilmessaggio dierrore èin `$ wpdb-> last_error`,nonin` $ wpdb-> last_result`.The error message is in `$wpdb->last_error`, not in `$wpdb->last_result`.
- 2
- 2018-12-12
- Martin_W
Per risolvereilproblema seguente,vedere https://wordpress.stackexchange.com/questions/178995/sanitize-a-working-query-string-by-using-wpdb-prepare-fails-with-mysql-db -er mi sonoimbattutoin un comportamentopiuttosto strano. Anche se lamia query utilizzataera correttae mostrava l'outputgiusto.
Maimenofinché ho
show_errors
eprint_error
attivi ottengo un output dierrore del database WP accanto:Maperché? Mi sarei aspettato che un outputfossemostrato solo se qualcosa va storto come unerrore o un avvertimento,main questomodo vienemostrato sempre qualcosa.