Skip to content

Commit

Permalink
Sqlserver DboSource does not allow the persistent option to be true.
Browse files Browse the repository at this point in the history
This is backported from CakePHP 3.  The SQL Server PHP PDO driver does not
support the PDO::ATTR_PERSISTENT attribute.  So throw an exception if the
'persistent' option is set in the database config.  Also removes that
option from the Sqlserver base config.
  • Loading branch information
MCF committed Aug 16, 2017
1 parent 12a2909 commit 0b65869
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions lib/Cake/Model/Datasource/Database/Sqlserver.php
Expand Up @@ -72,7 +72,6 @@ class Sqlserver extends DboSource {
* @var array
*/
protected $_baseConfig = array(
'persistent' => true,
'host' => 'localhost\SQLEXPRESS',
'login' => '',
'password' => '',
Expand Down Expand Up @@ -118,15 +117,24 @@ class Sqlserver extends DboSource {
/**
* Connects to the database using options in the given configuration array.
*
* Please note that the PDO::ATTR_PERSISTENT attribute is not supported by
* the SQL Server PHP PDO drivers. As a result you cannot use the
* persistent config option when connecting to a SQL Server (for more
* information see: https://github.com/Microsoft/msphpsql/issues/65).
*
* @return bool True if the database could be connected, else false
* @throws InvalidArgumentException if an unsupported setting is in the database config
* @throws MissingConnectionException
*/
public function connect() {
$config = $this->config;
$this->connected = false;

if (isset($config['persistent']) && $config['persistent']) {
throw new InvalidArgumentException('Config setting "persistent" cannot be set to true, as the Sqlserver PDO driver does not support PDO::ATTR_PERSISTENT');
}

$flags = $config['flags'] + array(
PDO::ATTR_PERSISTENT => $config['persistent'],
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);

Expand Down

0 comments on commit 0b65869

Please sign in to comment.