¿Por qué $ wpdb-> show_errors () y print_error () muestran una salida incluso si la salida de la consulta es correcta?
1 respuesta
- votos
-
- 2015-02-23
El resultado quepublicó anteriormenteesel comportamientoesperadopara
$wpdb->print_error()
si se cumple lo siguiente:- Ejecuta un único sitio,no varios sitios
-
$wpdb->suppress_errors
seestableceen falso -
$wpdb->show_errors
seestableceen falso
Porel aspecto de su código,cumple contodasesas condiciones.
Tengaen cuentatambién que,amenos que los haya desactivado anteriormente,
$wpdb->show_errors
seestableceentrue
deformapredeterminada,por lo quenonecesita llamar$wpdb->show_errors()
.Paragenerar algo solo cuando hay unerror debase de datos,puede hacer una deestas dos cosas:
1:muestraelerror y agregaelerror al registro
Además de apareceren lapantalla,elmétodo
$wpdb->print_error()
registrará suerror. Siestees un comportamiento deseable (recomendado),puede hacerlo:if($wpdb->last_error !== '') : $wpdb->print_error(); endif;
2:muestraelerrorperono lo registra
Sinoestáinteresadoen registrarelerror,puede agregar supropiafunción
my_print_error()
y usarlaen lugar 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; }
Últimaedición:error de sintaxis
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
-
Elmensaje deerrorestáen `$ wpdb-> last_error`,noen` $ wpdb-> last_result`.The error message is in `$wpdb->last_error`, not in `$wpdb->last_result`.
- 2
- 2018-12-12
- Martin_W
Para resolverel siguienteproblema,consulte https://wordpress.stackexchange.com/questions/178995/sanitize-a-working-query-string-by-using-wpdb-prepare-fails-with-mysql-db -er me encontré con un comportamientobastanteextraño. Incluso quemi consulta utilizadaera correcta ymostrabael resultado correcto.
No obstante,siempre quetenga
show_errors
yprint_error
activos,obtengo una salida deerror de labase de datos de WPjunto a:¿Peropor qué? Hubieraesperado que semostrara una salida solo si algo salemal,como unerror o una advertencia,pero deestamanera semuestra algotodoeltiempo.