質問: $wpdb->get_results("describe {$table};"); $wpdb->suppress_errors( $suppress ); suppress_errors()が仕事をしていて、エラーメッセージが画面に表示されないようにしているようです。 ただし、new relicのインストールで示されているように、これらのエラーは実際には処理されていないようです。当然のことながら、実際のエラー率を追跡するためにnew relicツールを正確に使用し、それらをnew relicのレポート作成ツールに関連付けることができるように、プロダクションアプリケーションで考えられるすべてのエラーの原因を排除したいと思います。dbdelta()がこのエラーを処理しない説得力のある理由はありますか?考えられる唯一の理由は、これが開発を容易にするための意図的な設計上の決定であるということです。そしてバグ修正。 dbdelta()がエラーを完全に抑制する場合、開発者が問題を突き止めるのは難しいかもしれません。もちろん、この自動的なエラー抑制を行うべきかどうかを指定するために新しいパラメータ/オプションを導入することもできます(これはmysqlerrorを捕捉することを非常に簡単にします)。install_blog()を呼び出すたびにこのエラーが発生するという私たちの場合、これはちょっとした問題になります。大規模なマルチサイトインストールを実行しているため、新しいブログを作成するたびにエラーが発生します。
回答: そのタイプのdbエラーは、db_debugが有効な場合にのみuiに表示されます。本番システムでは無効にする必要があります。 wpインストール用のwp-config.phpファイルにその設定があるはずです。ezsql_errorグローバルをリセットすることで、手動でエラーを「隠す」ように強制することができます。これは私の個人的なハックであり、おそらくdbdeltaを使用するための推奨またはベストプラクティスではありません。/** * update the data structures on new db versions. * * @global object $wpdb * @param type $sql * @param type $table_name * @return string */ function dbupdater($sql,$table_name) { global $wpdb; $retval = ( $wpdb->get_var("show tables like '$table_name'") != $table_name ) ? 'new' : 'updated'; require_once(abspath . 'wp-admin/includes/upgrade.php'); $were_showing_errors = $wpdb->show_errors; $wpdb->hide_errors(); dbdelta($sql); global $ezsql_error; $ezsql_error=array(); if ( $were_showing_errors ) { $wpdb->show_errors(); } return $retval; }