diff --git a/Cake/Database/Driver/Sqlserver.php b/Cake/Database/Driver/Sqlserver.php index 167623da73a..1a35cdd4b8c 100644 --- a/Cake/Database/Driver/Sqlserver.php +++ b/Cake/Database/Driver/Sqlserver.php @@ -61,12 +61,17 @@ public function connect() { $config['flags'][PDO::SQLSRV_ATTR_ENCODING] = $config['encoding']; } if (empty($config['dsn'])) { - $config['dsn'] = "sqlsrv:Server={$config['host']};Database={$config['database']}"; + if ($this->pdoDriverName() === 'sqlsrv') { + $config['dsn'] = "sqlsrv:Server={$config['host']};Database={$config['database']}"; + } else { + $config['dsn'] = "dblib:host={$config['host']};dbname={$config['database']}"; + } } $this->_connect($config); $connection = $this->connection(); + $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if (!empty($config['init'])) { foreach ((array)$config['init'] as $command) { $connection->exec($command); @@ -80,6 +85,22 @@ public function connect() { return true; } +/** + * Establishes a connection to the databse server + * + * @param array $config configuration to be used for creating connection + * @return boolean true on success + */ + protected function _connect(array $config) { + if ($this->pdoDriverName() !== 'sqlsrv') { + $connection = new PDO($config['dsn'], $config['login'], $config['password']); + } else { + $connection = new PDO($config['dsn'], $config['login'], $config['password'], $config['flags']); + } + $this->connection($connection); + return true; + } + /** * Returns whether php is able to use this driver for connecting to database * @@ -87,7 +108,11 @@ public function connect() { */ public function enabled() { - return in_array('sqlsrv', PDO::getAvailableDrivers()); + return in_array($this->pdoDriverName(), PDO::getAvailableDrivers()); + } + + protected function pdoDriverName() { + return strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' ? 'sqlsrv' : 'dblib'; } }