protected Tasks::connect()
Check if we can connect to the database.
Overrides Tasks::connect
File
- core/lib/Drupal/Core/Database/Driver/mysql/Install/Tasks.php, line 59
Class
- Tasks
- Specifies installation tasks for MySQL and equivalent databases.
Namespace
Drupal\Core\Database\Driver\mysql\Install
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | protected function connect() { try { // This doesn't actually test the connection. db_set_active(); // Now actually do a check. try { Database::getConnection(); } catch (\Exception $e ) { // Detect utf8mb4 incompability. if ( $e ->getCode() == Connection::UNSUPPORTED_CHARSET || ( $e ->getCode() == Connection::SQLSTATE_SYNTAX_ERROR && $e ->errorInfo[1] == Connection::UNKNOWN_CHARSET)) { $this ->fail(t( 'Your MySQL server and PHP MySQL driver must support utf8mb4 character encoding. Make sure to use a database system that supports this (such as MySQL/MariaDB/Percona 5.5.3 and up), and that the utf8mb4 character set is compiled in. See the <a href=":documentation" target="_blank">MySQL documentation</a> for more information.' , array ( ':documentation' => 'https://dev.mysql.com/doc/refman/5.0/en/cannot-initialize-character-set.html' ))); $info = Database::getConnectionInfo(); $info_copy = $info ; // Set a flag to fall back to utf8. Note: this flag should only be // used here and is for internal use only. $info_copy [ 'default' ][ '_dsn_utf8_fallback' ] = TRUE; // In order to change the Database::$databaseInfo array, we need to // remove the active connection, then re-add it with the new info. Database::removeConnection( 'default' ); Database::addConnectionInfo( 'default' , 'default' , $info_copy [ 'default' ]); // Connect with the new database info, using the utf8 character set so // that we can run the checkEngineVersion test. Database::getConnection(); // Revert to the old settings. Database::removeConnection( 'default' ); Database::addConnectionInfo( 'default' , 'default' , $info [ 'default' ]); } else { // Rethrow the exception. throw $e ; } } $this ->pass( 'Drupal can CONNECT to the database ok.' ); } catch (\Exception $e ) { // Attempt to create the database if it is not found. if ( $e ->getCode() == Connection::DATABASE_NOT_FOUND) { // Remove the database string from connection info. $connection_info = Database::getConnectionInfo(); $database = $connection_info [ 'default' ][ 'database' ]; unset( $connection_info [ 'default' ][ 'database' ]); // In order to change the Database::$databaseInfo array, need to remove // the active connection, then re-add it with the new info. Database::removeConnection( 'default' ); Database::addConnectionInfo( 'default' , 'default' , $connection_info [ 'default' ]); try { // Now, attempt the connection again; if it's successful, attempt to // create the database. Database::getConnection()->createDatabase( $database ); } catch (DatabaseNotFoundException $e ) { // Still no dice; probably a permission issue. Raise the error to the // installer. $this ->fail(t( 'Database %database not found. The server reports the following message when attempting to create the database: %error.' , array ( '%database' => $database , '%error' => $e ->getMessage()))); } } else { // Database connection failed for some other reason than the database // not existing. $this ->fail(t( 'Failed to connect to your database server. The server reports the following message: %error.<ul><li>Is the database server running?</li><li>Does the database exist or does the database user have sufficient privileges to create the database?</li><li>Have you entered the correct database name?</li><li>Have you entered the correct username and password?</li><li>Have you entered the correct database hostname?</li></ul>' , array ( '%error' => $e ->getMessage()))); return FALSE; } } return TRUE; } |
Please login to continue.