クエリ出力が正しい場合でも、$ 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()
.DBエラーが発生した場合にのみ何かを出力するには、次の2つのいずれかを実行できます-
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_result`ではなく` $ wpdb-> last_error`にあります.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データベースエラーが出力されます.しかし、なぜですか?エラーや警告などの問題が発生した場合にのみ出力が表示されることを期待していましたが、この方法では常に何かが表示されます.