diff --git a/wp-includes/functions.php b/wp-includes/functions.php
index cf9c11ed91..2c315baa44 100644
--- a/wp-includes/functions.php
+++ b/wp-includes/functions.php
@@ -1899,32 +1899,35 @@ function is_blog_installed() {
if ( $installed )
return true;
- $suppress = $wpdb->suppress_errors();
- $tables = $wpdb->get_col('SHOW TABLES');
- $wpdb->suppress_errors( $suppress );
+ // If visiting repair.php, return true and let it take over.
+ if ( defined( 'WP_REPAIRING' ) )
+ return true;
+
+ $suppress = $wpdb->suppress_errors();
- $wp_tables = $wpdb->tables();
// Loop over the WP tables. If none exist, then scratch install is allowed.
// If one or more exist, suggest table repair since we got here because the options
// table could not be accessed.
+ $wp_tables = $wpdb->tables();
foreach ( $wp_tables as $table ) {
- // If one of the WP tables exist, then we are in an insane state.
- if ( in_array( $table, $tables ) ) {
- // The existence of custom user tables shouldn't suggest an insane state or prevent a clean install.
- if ( defined( 'CUSTOM_USER_TABLE' ) && CUSTOM_USER_TABLE == $table )
- continue;
- if ( defined( 'CUSTOM_USER_META_TABLE' ) && CUSTOM_USER_META_TABLE == $table )
- continue;
+ // The existence of custom user tables shouldn't suggest an insane state or prevent a clean install.
+ if ( defined( 'CUSTOM_USER_TABLE' ) && CUSTOM_USER_TABLE == $table )
+ continue;
+ if ( defined( 'CUSTOM_USER_META_TABLE' ) && CUSTOM_USER_META_TABLE == $table )
+ continue;
- // If visiting repair.php, return true and let it take over.
- if ( defined('WP_REPAIRING') )
- return true;
- // Die with a DB error.
- $wpdb->error = sprintf( /*WP_I18N_NO_TABLES*/'One or more database tables are unavailable. The database may need to be repaired.'/*/WP_I18N_NO_TABLES*/, 'maint/repair.php?referrer=is_blog_installed' );
- dead_db();
- }
+ if ( ! $wpdb->get_results( "DESCRIBE $table;" ) )
+ continue;
+
+ // One or more tables exist. We are insane.
+
+ // Die with a DB error.
+ $wpdb->error = sprintf( /*WP_I18N_NO_TABLES*/'One or more database tables are unavailable. The database may need to be repaired.'/*/WP_I18N_NO_TABLES*/, 'maint/repair.php?referrer=is_blog_installed' );
+ dead_db();
}
+ $wpdb->suppress_errors( $suppress );
+
wp_cache_set( 'is_blog_installed', false );
return false;