You are here

public function Connection::__construct in Drupal 9

Same name in this branch
  1. 9 core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection::__construct()
  2. 9 core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php \Drupal\Core\Database\Driver\sqlite\Connection::__construct()
  3. 9 core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php \Drupal\Core\Database\Driver\pgsql\Connection::__construct()
  4. 9 core/lib/Drupal/Core/Database/Driver/mysql/Connection.php \Drupal\Core\Database\Driver\mysql\Connection::__construct()
Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Database/Driver/mysql/Connection.php \Drupal\Core\Database\Driver\mysql\Connection::__construct()

Constructs a Connection object.

Parameters

\PDO $connection: An object of the PDO class representing a database connection.

array $connection_options: An array of options for the connection. May include the following:

  • prefix
  • namespace
  • Other driver-specific options.

An 'extra_prefix' option may be present to allow BC for attaching per-table prefixes, but it is meant for internal use only.

Overrides Connection::__construct

File

core/lib/Drupal/Core/Database/Driver/mysql/Connection.php, line 95

Class

Connection
MySQL implementation of \Drupal\Core\Database\Connection.

Namespace

Drupal\Core\Database\Driver\mysql

Code

public function __construct(\PDO $connection, array $connection_options) {

  // If the SQL mode doesn't include 'ANSI_QUOTES' (explicitly or via a
  // combination mode), then MySQL doesn't interpret a double quote as an
  // identifier quote, in which case use the non-ANSI-standard backtick.
  //
  // Because we still support MySQL 5.7, check for the deprecated combination
  // modes as well.
  //
  // @see https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_ansi_quotes
  $ansi_quotes_modes = [
    'ANSI_QUOTES',
    'ANSI',
    'DB2',
    'MAXDB',
    'MSSQL',
    'ORACLE',
    'POSTGRESQL',
  ];
  $is_ansi_quotes_mode = FALSE;
  foreach ($ansi_quotes_modes as $mode) {

    // None of the modes in $ansi_quotes_modes are substrings of other modes
    // that are not in $ansi_quotes_modes, so a simple stripos() does not
    // return false positives.
    if (stripos($connection_options['init_commands']['sql_mode'], $mode) !== FALSE) {
      $is_ansi_quotes_mode = TRUE;
      break;
    }
  }
  if ($this->identifierQuotes === [
    '"',
    '"',
  ] && !$is_ansi_quotes_mode) {
    $this->identifierQuotes = [
      '`',
      '`',
    ];
  }
  parent::__construct($connection, $connection_options);
}