Почему $ wpdb-> show_errors () и print_error () показывают вывод, даже если вывод запроса правильный?
1 ответ
- голосов
-
- 2015-02-23
Вывод,который вы опубликовали выше,является ожидаемым поведением для
$wpdb->print_error()
,если верно следующее:- У вас один сайт,а не несколько.
-
$wpdb->suppress_errors
имеет значениеfalse -
$wpdb->show_errors
имеет значениеfalse
Судя по вашему коду,вы соответствуете всем этим условиям.
Обратите также внимание на то,что,если вы не отключили их ранее,для
$wpdb->show_errors
по умолчанию установлено значениеtrue
,поэтому вам не нужно вызывать$wpdb->show_errors()
.Чтобы вывести что-либо только в случае ошибки БД,вы можете сделать одно из следующих двух:
1 - Вывести ошибку и добавить ее в журнал
Помимо вывода на экран,метод
$wpdb->print_error()
регистрирует вашу ошибку. Если это желательное поведение (рекомендуется),вы можете сделать это -if($wpdb->last_error !== '') : $wpdb->print_error(); endif;
2 - Вывести ошибку,но не регистрировать ее
Если вас не интересует регистрация ошибки,вы можете добавить свою собственную функцию
my_print_error()
и использовать ее вместо$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; }
Последнее изменение: ошибка синтаксиса
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
-
Сообщение об ошибке находится в `$ wpdb-> last_error`,а не в` $ wpdb-> last_result`.The error message is in `$wpdb->last_error`, not in `$wpdb->last_result`.
- 2
- 2018-12-12
- Martin_W
Чтобы выяснить следующую проблему,см. https://wordpress.stackexchange.com/questions/178995/sanitize-a-working-query-string-by-using-wpdb-prepare-fails-with-mysql-db -er я столкнулся с довольно странным поведением. Даже этот мой использованный запрос был правильным и показывал правильный результат.
Тем не менее,пока у меня активны
show_errors
иprint_error
,я получаю вывод ошибки базы данных WP вместе с:Но почему? Я ожидал,что результат будет отображаться только в том случае,если что-то пойдет не так,например,ошибка или предупреждение,но таким образом что-то отображается постоянно.