picodb(mssql): support all MSSQL pdo drivers
For MSSQL make all connection attributes optional. Handle differing DB connection params based on driver used. connection can be made via ODBC DSN or server/hostname username/password can be embedded in DSN definition or simply omitted and single-signon will be attempted.
This commit is contained in:
parent
bb7f8b4621
commit
ee6cdb3565
|
|
@ -19,10 +19,6 @@ class Mssql extends Base
|
|||
* @var array
|
||||
*/
|
||||
protected $requiredAttributes = array(
|
||||
'hostname',
|
||||
'username',
|
||||
'password',
|
||||
'database',
|
||||
);
|
||||
|
||||
/**
|
||||
|
|
@ -53,13 +49,45 @@ class Mssql extends Base
|
|||
*/
|
||||
public function createConnection(array $settings)
|
||||
{
|
||||
$dsn = 'sqlsrv:Server=' . $settings['hostname'] . ';Database=' . $settings['database'];
|
||||
$dsn = $settings['driver'] . ':';
|
||||
|
||||
if (! empty($settings['port'])) {
|
||||
$dsn .= ';port=' . $settings['port'];
|
||||
// exactly one of hostname/DSN needed, port is optional
|
||||
if ($settings['driver'] == 'odbc') {
|
||||
$dsn .= $settings['odbc-dsn'];
|
||||
} else {
|
||||
if ($settings['driver'] == 'dblib') {
|
||||
$dsn .= 'host=' . $settings['hostname'];
|
||||
} elseif ($settings['driver'] == 'sqlsrv') {
|
||||
$dsn .= 'Server=' . $settings['hostname'];
|
||||
}
|
||||
if (! empty($settings['port'])) {
|
||||
$dsn .= ',' . $settings['port'];
|
||||
}
|
||||
}
|
||||
|
||||
$this->pdo = new PDO($dsn, $settings['username'], $settings['password']);
|
||||
if (! empty($settings['database'])) {
|
||||
if ($settings['driver'] == 'dblib') {
|
||||
$dsn .= ';dbname=' . $settings['database'];
|
||||
} elseif ($settings['driver'] == 'sqlsrv') {
|
||||
$dsn .= ';Database=' . $settings['database'];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (! empty($settings['appname'])) {
|
||||
if ($settings['driver'] == 'dblib') {
|
||||
$dsn .= ';appname=' . $settings['appname'];
|
||||
} elseif ($settings['driver'] == 'sqlsrv') {
|
||||
$dsn .= ';APP=' . $settings['appname'];
|
||||
}
|
||||
}
|
||||
|
||||
// create PDO object
|
||||
if (! empty($settings['username'])) {
|
||||
$this->pdo = new PDO($dsn, $settings['username'], $settings['password']);
|
||||
} else {
|
||||
$this->pdo = new PDO($dsn);
|
||||
}
|
||||
|
||||
if (isset($settings['schema_table'])) {
|
||||
$this->schemaTable = $settings['schema_table'];
|
||||
|
|
|
|||
|
|
@ -32,6 +32,10 @@ class DriverFactory
|
|||
switch ($settings['driver']) {
|
||||
case 'sqlite':
|
||||
return new Sqlite($settings);
|
||||
case 'odbc':
|
||||
return new Mssql($settings);
|
||||
case 'dblib':
|
||||
return new Mssql($settings);
|
||||
case 'mssql':
|
||||
return new Mssql($settings);
|
||||
case 'mysql':
|
||||
|
|
|
|||
Loading…
Reference in New Issue