Example #1
0
/**
 * Check a database connection and return any errors.
 */
function install_database_errors($database, $settings_file)
{
    global $databases;
    $errors = array();
    // Verify the table prefix
    if (!empty($database['db_prefix']) && is_string($database['db_prefix']) && !preg_match('/^[A-Za-z0-9_.]+$/', $database['db_prefix'])) {
        $errors['db_prefix'] = st('The database table prefix you have entered, %db_prefix, is invalid. The table prefix can only contain alphanumeric characters, periods, or underscores.', array('%db_prefix' => $database['db_prefix']));
    }
    if (!empty($database['port']) && !is_numeric($database['port'])) {
        $errors['db_port'] = st('Database port must be a number.');
    }
    // Check database type
    $database_types = drupal_detect_database_types();
    $driver = $database['driver'];
    if (!isset($database_types[$driver])) {
        $errors['driver'] = st("In your %settings_file file you have configured @drupal to use a %driver server, however your PHP installation currently does not support this database type.", array('%settings_file' => $settings_file, '@drupal' => drupal_install_profile_name(), '%driver' => $database['driver']));
    } else {
        // Run tasks associated with the database type. Any errors are caught in the
        // calling function
        $databases['default']['default'] = $database;
        // Just changing the global doesn't get the new information processed.
        // We tell tell the Database class to re-parse $databases.
        Database::parseConnectionInfo();
        try {
            db_run_tasks($database['driver']);
        } catch (DatabaseTaskException $e) {
            // These are generic errors, so we do not have any specific key of the
            // database connection array to attach them to; therefore, we just put
            // them in the error array with standard numeric keys.
            $errors[] = $e->getMessage();
        }
    }
    return $errors;
}