<?php declare(strict_types=1); namespace Doctrine\DBAL\Driver\IBMDB2; use Doctrine\DBAL\Driver\AbstractDB2Driver; use Doctrine\DBAL\Driver\Connection; use function array_keys; use function array_map; use function implode; use function sprintf; /** * IBM DB2 Driver. */ class DB2Driver extends AbstractDB2Driver { /** * {@inheritdoc} */ public function connect( array $params, string $username = '', string $password = '', array $driverOptions = [] ) : Connection { if ($params['host'] !== 'localhost' && $params['host'] !== '127.0.0.1') { // if the host isn't localhost, use extended connection params $params['dbname'] = $this->buildConnectionString($params, $username, $password); $username = $password = ''; } return new DB2Connection($params, $username, $password, $driverOptions); } /** * @param string[] $params */ private function buildConnectionString(array $params, string $username, string $password) : string { $connectionParams = [ 'DRIVER' => '{IBM DB2 ODBC DRIVER}', 'DATABASE' => $params['dbname'], 'HOSTNAME' => $params['host'], 'PROTOCOL' => $params['protocol'] ?? 'TCPIP', 'UID' => $username, 'PWD' => $password, ]; if (isset($params['port'])) { $connectionParams['PORT'] = $params['port']; } return implode(';', array_map(static function (string $key, string $value) : string { return sprintf('%s=%s', $key, $value); }, array_keys($connectionParams), $connectionParams)); } }