7 database.inc public DatabaseConnection_mysql::__construct(array $connection_options = array())

Overrides DatabaseConnection::__construct


includes/database/mysql/database.inc, line 22
Database interface code for MySQL database servers.




public function __construct(array $connection_options = array()) {
  // This driver defaults to transaction support, except if explicitly passed FALSE.
  $this->transactionSupport = !isset($connection_options ['transactions']) || ($connection_options ['transactions'] !== FALSE);

  // MySQL never supports transactional DDL.
  $this->transactionalDDLSupport = FALSE;

  $this->connectionOptions = $connection_options;

  // The DSN should use either a socket or a host/port.
  if (isset($connection_options ['unix_socket'])) {
    $dsn = 'mysql:unix_socket=' . $connection_options ['unix_socket'];
  else {
    // Default to TCP connection on port 3306.
    $dsn = 'mysql:host=' . $connection_options ['host'] . ';port=' . (empty($connection_options ['port']) ? 3306 : $connection_options ['port']);
  // Character set is added to dsn to ensure PDO uses the proper character
  // set when escaping. This has security implications. See
  // https://www.drupal.org/node/1201452 for further discussion.
  $dsn .= ';charset=utf8';
  $dsn .= ';dbname=' . $connection_options ['database'];
  // Allow PDO options to be overridden.
  $connection_options += array(
    'pdo' => array(),
  $connection_options ['pdo'] += array(
    // So we don't have to mess around with cursors and unbuffered queries by default.
    // Because MySQL's prepared statements skip the query cache, because it's dumb.

  parent::__construct($dsn, $connection_options ['username'], $connection_options ['password'], $connection_options ['pdo']);

  // Force MySQL to use the UTF-8 character set. Also set the collation, if a
  // certain one has been set; otherwise, MySQL defaults to 'utf8_general_ci'
  // for UTF-8.
  if (!empty($connection_options ['collation'])) {
    $this->exec('SET NAMES utf8 COLLATE ' . $connection_options ['collation']);
  else {
    $this->exec('SET NAMES utf8');

  // Set MySQL init_commands if not already defined.  Default Drupal's MySQL
  // behavior to conform more closely to SQL standards.  This allows Drupal
  // to run almost seamlessly on many different kinds of database systems.
  // These settings force MySQL to behave the same as postgresql, or sqlite
  // in regards to syntax interpretation and invalid data handling.  See
  // http://drupal.org/node/344575 for further discussion. Also, as MySQL 5.5
  // changed the meaning of TRADITIONAL we need to spell out the modes one by
  // one.
  $connection_options += array(
    'init_commands' => array(),
  $connection_options ['init_commands'] += array(
  // Set connection options.
  $this->exec(implode('; ', $connection_options ['init_commands']));