Por que $ WPDB-> Show_Errors () e Print_Error () está mostrando uma saída mesmo se a saída da consulta estiver correta?
1 responda
- votos
-
- 2015-02-23
A saída que vocêpostou acima é o comportamentoesperadopara
$ wpdb- >print_error ()
se o seguintefor verdadeiro -- vocêestáexecutando um único site,nãomultisite
-
$ wpdb- > suppress_errors
é definido comofalse -
$ wpdb- > show_errors
é definido comofalse
Da aparência do seu código,você conhecetodasessas condições.
Observetambém que,amenos que vocêtenha desligado anteriormente,
$ wpdb- > show_errors
é definido comoTrue Porpadrão,então vocênãoprecisa ligar $ wpdb- > show_errors ()
.Paraproduzir algo apenas quando houver umerro de DB,vocêpodefazer uma dessas duas coisas -
1 - Saída doerroe adicionar oerro ao log
Bem como saídanatela,ométodo
$ WPDB- & GT; Print_Error () Ométodo registrará seuerro. Seisso é um comportamento desejável (recomendado),vocêpodefazerisso - se ($ WPDB- & GT; Last_Error!==''): $ WPDB- & GT; Print_Error (); fim se;
2 - Saída oerro,masnão o log
Se vocênãoestiverinteressadoem registrar oerro,vocêpode adicionar seupróprio
my_print_error ()
funcitone usarissoem vez de$ wpdb- >print_error ()
-Função My_Print_Error () { Global $ WPDB; if ($ wpdb- > last_error!==''): $ str=htmlspecialchars ($ wpdb- > last_result,ent_quotes); $ query=htmlspecialchars ($ wpdb- > last_query,ent_quotes); Imprimir "& lt; DIV ID='erro' > & lt;p class='wpdberror' > & lt;erro debanco de dadosfortee gt; wordpress: & lt;/forte > [$ str] & lt;br/> e lt; código > $ query & lt;/código > & lt;/p > & lt;/div > "; fim se; }
Últimaedição:erro de sintaxe
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
-
Amensagem deerroestáno `$ wpdb-> last_error`,nãoem` $ wpdb-> last_result`.The error message is in `$wpdb->last_error`, not in `$wpdb->last_result`.
- 2
- 2018-12-12
- Martin_W
Para descobrir o seguinteproblema,consulte https://wordpress.stackexchange.com/questions/178995/sanitize-a-working-quer-pring-by-using-wpdb-mysql-db -er Eu corripara um comportamentobastanteestranho. Mesmo queminha consulta usadafosse corretae mostrando a saída certa.
Nunca omenor desde queeutenha
show_errors
eprint_error
ativoeu recebo uma saída deerro debanco de dados WP ao lado:Maspor quê? Euteriaesperado que uma saída sejamostrada apenas se algo dererrado como umerro ou aviso,mas destaforma,algo émostrado otempotodo.