Pourquoi $ wpdb-> show_errors () et print_error () affichent une sortie même si la sortie de la requête est correcte?
1 réponses
- votes
-
- 2015-02-23
Le résultat que vous avezpublié ci-dessusest le comportement attendupour
$wpdb->print_error()
si ce qui suitest vrai -- Vousgérez un site unique,pasmultisite
-
$wpdb->suppress_errors
est défini surfalse -
$wpdb->show_errors
est défini surfalse
D'après l'apparence de votre code,vous remplisseztoutes ces conditions.
Notez également que,sauf si vous les avez désactivés auparavant,
$wpdb->show_errors
est défini surtrue
par défaut,vousn'avez doncpasbesoin d'appeler$wpdb->show_errors()
.Pour afficher quelque chose uniquementen cas d'erreur debase de données,vouspouvezfaire l'une de ces deux choses -
1 - Sortez l'erreuret ajoutez l'erreur aujournal
Enplus de la sortie à l'écran,laméthode
$wpdb->print_error()
enregistrera votreerreur. Si c'est un comportement souhaitable (recommandé),vouspouvez lefaire -if($wpdb->last_error !== '') : $wpdb->print_error(); endif;
2 - Affiche l'erreurmaisne la consignepas
Si vousn'êtespasintéressépar lajournalisation de l'erreur,vouspouvez ajouter votreproprefonction
my_print_error()
et l'utiliser à laplace de$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; }
Dernièremodification:erreur de syntaxe
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
-
Lemessage d'erreurest dans `$ wpdb-> last_error`,pas dans` $ wpdb-> last_result`.The error message is in `$wpdb->last_error`, not in `$wpdb->last_result`.
- 2
- 2018-12-12
- Martin_W
Pour résoudre leproblème suivant,consultez https://wordpress.stackexchange.com/questions/178995/sanitize-a-working-query-string-by-using-wpdb-prepare-fails-with-mysql-db -er j'ai rencontré un comportementplutôt étrange. Même sima requête utilisée était correcteet affichait lebon résultat.
Jamaismoinstant quej'ai
show_errors
etprint_error
actifs,j'obtiens une sortie d'erreur debase de données WP à côté:Maispourquoi? Jeme serais attendu à ce qu'une sortiene soit affichée que si quelque chosene vapas comme uneerreur ou un avertissement,mais de cettefaçon,quelque choseest affichétout letemps.