class Connection

Same name in this branch
  1. 11.x core/modules/sqlite/src/Driver/Database/sqlite/Connection.php \Drupal\sqlite\Driver\Database\sqlite\Connection
  2. 11.x core/modules/mysql/src/Driver/Database/mysql/Connection.php \Drupal\mysql\Driver\Database\mysql\Connection
  3. 11.x core/modules/system/tests/modules/driver_test/src/Driver/Database/DriverTestMysql/Connection.php \Drupal\driver_test\Driver\Database\DriverTestMysql\Connection
  4. 11.x core/modules/system/tests/modules/driver_test/src/Driver/Database/DriverTestMysqlDeprecatedVersion/Connection.php \Drupal\driver_test\Driver\Database\DriverTestMysqlDeprecatedVersion\Connection
  5. 11.x core/modules/system/tests/modules/driver_test/src/Driver/Database/DriverTestPgsql/Connection.php \Drupal\driver_test\Driver\Database\DriverTestPgsql\Connection
  6. 11.x core/modules/pgsql/src/Driver/Database/pgsql/Connection.php \Drupal\pgsql\Driver\Database\pgsql\Connection
  7. 11.x core/tests/fixtures/database_drivers/module/core_fake/src/Driver/Database/CoreFake/Connection.php \Drupal\core_fake\Driver\Database\CoreFake\Connection
  8. 11.x core/tests/fixtures/database_drivers/module/core_fake/src/Driver/Database/CoreFakeWithAllCustomClasses/Connection.php \Drupal\core_fake\Driver\Database\CoreFakeWithAllCustomClasses\Connection
  9. 11.x core/tests/fixtures/database_drivers/core/CoreFake/Connection.php \Drupal\Core\Database\Driver\CoreFake\Connection
  10. 11.x core/tests/fixtures/database_drivers/custom/CoreFake/Connection.php \Drupal\Driver\Database\CoreFake\Connection
  11. 11.x core/tests/fixtures/database_drivers/custom/fake/Connection.php \Drupal\Driver\Database\fake\Connection
  12. 11.x core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection
  13. 11.x core/modules/system/tests/modules/dummydb/src/Driver/Database/dummydb/Connection.php \Drupal\dummydb\Driver\Database\dummydb\Connection
Same name and namespace in other branches
  1. 9 core/modules/sqlite/src/Driver/Database/sqlite/Connection.php \Drupal\sqlite\Driver\Database\sqlite\Connection
  2. 9 core/modules/mysql/src/Driver/Database/mysql/Connection.php \Drupal\mysql\Driver\Database\mysql\Connection
  3. 9 core/modules/system/tests/modules/database_statement_monitoring_test/src/sqlite/Connection.php \Drupal\database_statement_monitoring_test\sqlite\Connection
  4. 9 core/modules/system/tests/modules/database_statement_monitoring_test/src/mysql/Connection.php \Drupal\database_statement_monitoring_test\mysql\Connection
  5. 9 core/modules/system/tests/modules/database_statement_monitoring_test/src/pgsql/Connection.php \Drupal\database_statement_monitoring_test\pgsql\Connection
  6. 9 core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestMysql/Connection.php \Drupal\driver_test\Driver\Database\DrivertestMysql\Connection
  7. 9 core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestMysqlDeprecatedVersion/Connection.php \Drupal\driver_test\Driver\Database\DrivertestMysqlDeprecatedVersion\Connection
  8. 9 core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestPgsql/Connection.php \Drupal\driver_test\Driver\Database\DrivertestPgsql\Connection
  9. 9 core/modules/pgsql/src/Driver/Database/pgsql/Connection.php \Drupal\pgsql\Driver\Database\pgsql\Connection
  10. 9 core/tests/fixtures/database_drivers/module/corefake/src/Driver/Database/corefake/Connection.php \Drupal\corefake\Driver\Database\corefake\Connection
  11. 9 core/tests/fixtures/database_drivers/module/corefake/src/Driver/Database/corefakeWithAllCustomClasses/Connection.php \Drupal\corefake\Driver\Database\corefakeWithAllCustomClasses\Connection
  12. 9 core/tests/fixtures/database_drivers/core/corefake/Connection.php \Drupal\Core\Database\Driver\corefake\Connection
  13. 9 core/tests/fixtures/database_drivers/custom/corefake/Connection.php \Drupal\Driver\Database\corefake\Connection
  14. 9 core/tests/fixtures/database_drivers/custom/fake/Connection.php \Drupal\Driver\Database\fake\Connection
  15. 9 core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php \Drupal\Core\Database\Driver\sqlite\Connection
  16. 9 core/lib/Drupal/Core/Database/Driver/mysql/Connection.php \Drupal\Core\Database\Driver\mysql\Connection
  17. 9 core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php \Drupal\Core\Database\Driver\pgsql\Connection
  18. 9 core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection
  19. 8.9.x core/modules/system/tests/modules/database_statement_monitoring_test/src/sqlite/Connection.php \Drupal\database_statement_monitoring_test\sqlite\Connection
  20. 8.9.x core/modules/system/tests/modules/database_statement_monitoring_test/src/mysql/Connection.php \Drupal\database_statement_monitoring_test\mysql\Connection
  21. 8.9.x core/modules/system/tests/modules/database_statement_monitoring_test/src/pgsql/Connection.php \Drupal\database_statement_monitoring_test\pgsql\Connection
  22. 8.9.x core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestMysql/Connection.php \Drupal\driver_test\Driver\Database\DrivertestMysql\Connection
  23. 8.9.x core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestMysqlDeprecatedVersion/Connection.php \Drupal\driver_test\Driver\Database\DrivertestMysqlDeprecatedVersion\Connection
  24. 8.9.x core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestPgsql/Connection.php \Drupal\driver_test\Driver\Database\DrivertestPgsql\Connection
  25. 8.9.x core/tests/fixtures/database_drivers/module/corefake/src/Driver/Database/corefake/Connection.php \Drupal\corefake\Driver\Database\corefake\Connection
  26. 8.9.x core/tests/fixtures/database_drivers/core/corefake/Connection.php \Drupal\Core\Database\Driver\corefake\Connection
  27. 8.9.x core/tests/fixtures/database_drivers/custom/corefake/Connection.php \Drupal\Driver\Database\corefake\Connection
  28. 8.9.x core/tests/fixtures/database_drivers/custom/fake/Connection.php \Drupal\Driver\Database\fake\Connection
  29. 8.9.x core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php \Drupal\Core\Database\Driver\sqlite\Connection
  30. 8.9.x core/lib/Drupal/Core/Database/Driver/mysql/Connection.php \Drupal\Core\Database\Driver\mysql\Connection
  31. 8.9.x core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php \Drupal\Core\Database\Driver\pgsql\Connection
  32. 8.9.x core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection
  33. 10 core/modules/sqlite/src/Driver/Database/sqlite/Connection.php \Drupal\sqlite\Driver\Database\sqlite\Connection
  34. 10 core/modules/mysql/src/Driver/Database/mysql/Connection.php \Drupal\mysql\Driver\Database\mysql\Connection
  35. 10 core/modules/system/tests/modules/database_statement_monitoring_test/src/sqlite/Connection.php \Drupal\database_statement_monitoring_test\sqlite\Connection
  36. 10 core/modules/system/tests/modules/database_statement_monitoring_test/src/mysql/Connection.php \Drupal\database_statement_monitoring_test\mysql\Connection
  37. 10 core/modules/system/tests/modules/database_statement_monitoring_test/src/pgsql/Connection.php \Drupal\database_statement_monitoring_test\pgsql\Connection
  38. 10 core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestMysql/Connection.php \Drupal\driver_test\Driver\Database\DrivertestMysql\Connection
  39. 10 core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestMysqlDeprecatedVersion/Connection.php \Drupal\driver_test\Driver\Database\DrivertestMysqlDeprecatedVersion\Connection
  40. 10 core/modules/system/tests/modules/driver_test/src/Driver/Database/DrivertestPgsql/Connection.php \Drupal\driver_test\Driver\Database\DrivertestPgsql\Connection
  41. 10 core/modules/pgsql/src/Driver/Database/pgsql/Connection.php \Drupal\pgsql\Driver\Database\pgsql\Connection
  42. 10 core/tests/fixtures/database_drivers/module/core_fake/src/Driver/Database/CoreFake/Connection.php \Drupal\core_fake\Driver\Database\CoreFake\Connection
  43. 10 core/tests/fixtures/database_drivers/module/core_fake/src/Driver/Database/CoreFakeWithAllCustomClasses/Connection.php \Drupal\core_fake\Driver\Database\CoreFakeWithAllCustomClasses\Connection
  44. 10 core/tests/fixtures/database_drivers/core/CoreFake/Connection.php \Drupal\Core\Database\Driver\CoreFake\Connection
  45. 10 core/tests/fixtures/database_drivers/custom/CoreFake/Connection.php \Drupal\Driver\Database\CoreFake\Connection
  46. 10 core/tests/fixtures/database_drivers/custom/fake/Connection.php \Drupal\Driver\Database\fake\Connection
  47. 10 core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php \Drupal\Core\Database\Driver\sqlite\Connection
  48. 10 core/lib/Drupal/Core/Database/Driver/mysql/Connection.php \Drupal\Core\Database\Driver\mysql\Connection
  49. 10 core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php \Drupal\Core\Database\Driver\pgsql\Connection
  50. 10 core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection

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

Hierarchy

Expanded class hierarchy of Connection

5 string references to 'Connection'
DriverSpecificConnectionUnitTestBase::testConnectionOpen in core/tests/Drupal/KernelTests/Core/Database/DriverSpecificConnectionUnitTestBase.php
Tests pdo options override.
FileTransfer::__get in core/lib/Drupal/Core/FileTransfer/FileTransfer.php
Implements the magic __get() method.
FileTransfer::__isset in core/lib/Drupal/Core/FileTransfer/FileTransfer.php
FileTransfer::__set in core/lib/Drupal/Core/FileTransfer/FileTransfer.php
FileTransfer::__unset in core/lib/Drupal/Core/FileTransfer/FileTransfer.php

File

core/modules/mysqli/src/Driver/Database/mysqli/Connection.php, line 18

Namespace

Drupal\mysqli\Driver\Database\mysqli
View source
class Connection extends BaseMySqlConnection {
  
  /**
   * {@inheritdoc}
   */
  protected $statementWrapperClass = Statement::class;
  public function __construct(\mysqli $connection, array $connectionOptions = []) {
    // 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.
    //
    // @see https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_ansi_quotes
    $ansiQuotesModes = [
      'ANSI_QUOTES',
      'ANSI',
    ];
    $isAnsiQuotesMode = FALSE;
    if (isset($connectionOptions['init_commands']['sql_mode'])) {
      foreach ($ansiQuotesModes as $mode) {
        // None of the modes in $ansiQuotesModes are substrings of other modes
        // that are not in $ansiQuotesModes, so a simple stripos() does not
        // return false positives.
        if (stripos($connectionOptions['init_commands']['sql_mode'], $mode) !== FALSE) {
          $isAnsiQuotesMode = TRUE;
          break;

        }
      }
    }
    if ($this->identifierQuotes === [
      '"',
      '"',
    ] && !$isAnsiQuotesMode) {
      $this->identifierQuotes = [
        '`',
        '`',
      ];
    }
    BaseConnection::__construct($connection, $connectionOptions);
  }
  
  /**
   * {@inheritdoc}
   */
  public static function open(array &$connection_options = []) {
    // Sets mysqli error reporting mode to report errors from mysqli function
    // calls and to throw mysqli_sql_exception for errors.
    // @see https://www.php.net/manual/en/mysqli-driver.report-mode.php
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    // Allow PDO options to be overridden.
    $connection_options += [
      'pdo' => [],
    ];
    try {
      $mysqli = @new \mysqli($connection_options['host'], $connection_options['username'], $connection_options['password'], $connection_options['database'] ?? '', !empty($connection_options['port']) ? (int) $connection_options['port'] : 3306, $connection_options['unix_socket'] ?? '');
      if (!$mysqli->set_charset('utf8mb4')) {
        throw new InvalidCharsetException('Invalid charset utf8mb4');
      }
    } catch (\mysqli_sql_exception $e) {
      if ($e->getCode() === static::DATABASE_NOT_FOUND) {
        throw new DatabaseNotFoundException($e->getMessage(), $e->getCode(), $e);
      }
      elseif ($e->getCode() === static::ACCESS_DENIED) {
        throw new DatabaseAccessDeniedException($e->getMessage(), $e->getCode(), $e);
      }
      throw new ConnectionNotDefinedException('Invalid database connection: ' . $e->getMessage(), $e->getCode(), $e);
    }
    // Force MySQL to use the UTF-8 character set. Also set the collation, if a
    // certain one has been set; otherwise, MySQL defaults to
    // 'utf8mb4_0900_ai_ci' for the 'utf8mb4' character set.
    if (!empty($connection_options['collation'])) {
      $mysqli->query('SET NAMES utf8mb4 COLLATE ' . $connection_options['collation']);
    }
    else {
      $mysqli->query('SET NAMES utf8mb4');
    }
    // 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 regard to syntax interpretation and invalid data handling.  See
    // https://www.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 += [
      'init_commands' => [],
    ];
    $connection_options['init_commands'] += [
      'sql_mode' => "SET sql_mode = 'ANSI,TRADITIONAL'",
    ];
    if (!empty($connection_options['isolation_level'])) {
      $connection_options['init_commands'] += [
        'isolation_level' => 'SET SESSION TRANSACTION ISOLATION LEVEL ' . strtoupper($connection_options['isolation_level']),
      ];
    }
    // Execute initial commands.
    foreach ($connection_options['init_commands'] as $sql) {
      $mysqli->query($sql);
    }
    return $mysqli;
  }
  
  /**
   * {@inheritdoc}
   */
  public function driver() {
    return 'mysqli';
  }
  
  /**
   * {@inheritdoc}
   */
  public function clientVersion() {
    return \mysqli_get_client_info();
  }
  
  /**
   * {@inheritdoc}
   */
  public function createDatabase($database) : void {
    // Escape the database name.
    $database = Database::getConnection()->escapeDatabase($database);
    try {
      // Create the database and set it as active.
      $this->connection
        ->query("CREATE DATABASE {$database}");
      $this->connection
        ->query("USE {$database}");
    } catch (\Exception $e) {
      throw new DatabaseNotFoundException($e->getMessage());
    }
  }
  
  /**
   * {@inheritdoc}
   */
  public function quote($string, $parameter_type = \PDO::PARAM_STR) {
    return "'" . $this->connection
      ->escape_string((string) $string) . "'";
  }
  
  /**
   * {@inheritdoc}
   */
  public function lastInsertId(?string $name = NULL) : string {
    return (string) $this->connection->insert_id;
  }
  
  /**
   * {@inheritdoc}
   */
  public function exceptionHandler() {
    return new ExceptionHandler();
  }
  
  /**
   * {@inheritdoc}
   */
  protected function driverTransactionManager() : TransactionManagerInterface {
    return new TransactionManager($this);
  }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
Connection::$connection protected property The actual client connection.
Connection::$connectionOptions protected property The connection information for this connection object.
Connection::$driverClasses protected property Index of what driver-specific class to use for various operations.
Connection::$enabledEvents private property Tracks the database API events to be dispatched.
Connection::$escapedAliases protected property List of escaped aliases names, keyed by unescaped aliases.
Connection::$escapedFields protected property List of escaped field names, keyed by unescaped names.
Connection::$escapedTables protected property List of escaped table names, keyed by unescaped names.
Connection::$identifierQuotes protected property The identifier quote characters for the database type. Overrides Connection::$identifierQuotes
Connection::$key protected property The key representing this connection.
Connection::$logger protected property The current database logging object for this connection.
Connection::$prefix protected property The prefix used by this database connection.
Connection::$schema protected property The schema object for this connection. 5
Connection::$serverVersion private property Stores the server version after it has been retrieved from the database.
Connection::$statementWrapperClass protected property The name of the StatementWrapper class for this connection. Overrides Connection::$statementWrapperClass
Connection::$tablePlaceholderReplacements protected property Replacements to fully qualify {table} placeholders in SQL strings.
Connection::$target protected property The database target this connection is for.
Connection::$transactionalDDLSupport protected property Whether this database connection supports transactional DDL. 2
Connection::$transactionManager protected property The transaction manager.
Connection::ACCESS_DENIED constant Error code for "Access denied" error.
Connection::attachDatabase public function Allows the connection to access additional databases. 1
Connection::clientVersion public function Returns the version of the database client. Overrides Connection::clientVersion
Connection::commitAll public function Commits all the open transactions.
Connection::condition public function Prepares and returns a CONDITION query object. 2
Connection::CONNECTION_REFUSED constant Error code for "Connection refused".
Connection::createConnectionOptionsFromUrl public static function Creates an array of database connection options from a URL. 1
Connection::createDatabase public function Overrides \Drupal\Core\Database\Connection::createDatabase(). Overrides Connection::createDatabase
Connection::createUrlFromConnectionOptions public static function Creates a URL from an array of database connection options. 1
Connection::databaseType public function Returns the name of the database engine accessed by this driver. Overrides Connection::databaseType 1
Connection::DATABASE_NOT_FOUND constant Error code for "Unknown database" error.
Connection::defaultOptions protected function Returns the default query options for any given query.
Connection::delete public function Prepares and returns a DELETE query object. 2
Connection::disableEvents public function Disables database API events dispatching.
Connection::dispatchEvent public function Dispatches a database API event via the container dispatcher.
Connection::driver public function Returns the type of database driver. Overrides Connection::driver
Connection::driverTransactionManager protected function Returns a new instance of the driver's transaction manager. Overrides Connection::driverTransactionManager
Connection::enableEvents public function Enables database API events dispatching.
Connection::escapeAlias public function Escapes an alias name string.
Connection::escapeDatabase public function Escapes a database name string.
Connection::escapeField public function Escapes a field name string.
Connection::escapeLike public function Escapes characters that work as wildcard characters in a LIKE pattern.
Connection::escapeTable public function Escapes a table name string.
Connection::exceptionHandler public function Returns the database exceptions handler. Overrides Connection::exceptionHandler
Connection::expandArguments protected function Expands out shorthand placeholders.
Connection::filterComment protected function Sanitize a query comment string.
Connection::findCallerFromDebugBacktrace public function Determine the last non-database method that called the database API.
Connection::getClientConnection public function Returns the client-level database connection object.
Connection::getConnectionOptions public function Returns the connection information for this connection object.
Connection::getDebugBacktrace protected function Gets the debug backtrace.
Connection::getDriverClass public function Gets the driver-specific override class if any for the specified class.
Connection::getFullQualifiedTableName public function Get a fully qualified table name. 2
Connection::getKey public function Returns the key this connection is associated with.
Connection::getLogger public function Gets the current logging object for this connection.
Connection::getMariaDbVersionMatch protected function Gets the MariaDB portion of the server version.
Connection::getPagerManager public function Get the pager manager service, if available.
Connection::getPrefix public function Returns the prefix of the tables.
Connection::getProvider public function Get the module name of the module that is providing the database driver.
Connection::getServerVersion protected function Gets the server version. 1
Connection::getSQLState protected static function Extracts the SQLSTATE error from a PDOException.
Connection::getTarget public function Returns the target this connection is associated with.
Connection::hasJson public function Runs a simple query to validate json datatype support. 1
Connection::insert public function Prepares and returns an INSERT query object. Overrides Connection::insert
Connection::inTransaction public function Determines if there is an active transaction open.
Connection::isEventEnabled public function Returns the status of a database API event toggle.
Connection::isMariaDb public function Determines whether the MySQL distribution is MariaDB or not. 1
Connection::lastInsertId public function Returns the ID of the last inserted row or sequence value. Overrides Connection::lastInsertId
Connection::makeComment public function Flatten an array of query comments into a single comment string.
Connection::mapConditionOperator public function Gets any special processing requirements for the condition operator. Overrides Connection::mapConditionOperator
Connection::merge public function Prepares and returns a MERGE query object. 1
Connection::MIN_MAX_ALLOWED_PACKET constant The minimal possible value for the max_allowed_packet setting of MySQL.
Connection::open public static function Opens a client connection. Overrides Connection::open
Connection::prefixTables public function Appends a database prefix to all tables in a query.
Connection::prepareStatement public function Returns a prepared statement given a SQL string. 2
Connection::preprocessStatement protected function Returns a string SQL statement ready for preparation.
Connection::query public function Executes a query string against the database. 1
Connection::queryRange public function Runs a limited-range query on this database object. Overrides Connection::queryRange
Connection::queryTemporary public function Runs a SELECT query and stores its results in a temporary table. Overrides SupportsTemporaryTablesInterface::queryTemporary
Connection::quote public function Quotes a string for use in a query. Overrides Connection::quote
Connection::quoteIdentifiers public function Quotes all identifiers in a query.
Connection::removeDatabaseEntriesFromDebugBacktrace public static function Removes database related calls from a backtrace array.
Connection::schema public function Returns a DatabaseSchema object for manipulating the schema. Overrides Connection::schema
Connection::select public function Prepares and returns a SELECT query object. 3
Connection::setKey public function Tells this connection object what its key is.
Connection::setLogger public function Associates a logging object with this connection.
Connection::setPrefix protected function Set the prefix used by this database connection. 1
Connection::setTarget public function Tells this connection object what its target value is.
Connection::startTransaction public function Returns a new DatabaseTransaction object on this connection. 1
Connection::supportsTransactionalDDL public function Determines if this driver supports transactional DDL.
Connection::transactionManager public function Returns the transaction manager.
Connection::truncate public function Prepares and returns a TRUNCATE query object. 3
Connection::update public function Prepares and returns an UPDATE query object. 2
Connection::upsert public function Prepares and returns an UPSERT query object. Overrides Connection::upsert
Connection::version public function Returns the version of the database server. Overrides Connection::version 1
Connection::__construct public function Constructs a Connection object. Overrides Connection::__construct
Connection::__destruct public function Ensures that the client connection can be garbage collected. 1
Connection::__sleep public function Prevents the database connection from being serialized.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.