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:
committed by
Frédéric Guillot
parent
bb7f8b4621
commit
ee6cdb3565
@@ -19,10 +19,6 @@ class Mssql extends Base
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $requiredAttributes = array(
|
protected $requiredAttributes = array(
|
||||||
'hostname',
|
|
||||||
'username',
|
|
||||||
'password',
|
|
||||||
'database',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -53,13 +49,45 @@ class Mssql extends Base
|
|||||||
*/
|
*/
|
||||||
public function createConnection(array $settings)
|
public function createConnection(array $settings)
|
||||||
{
|
{
|
||||||
$dsn = 'sqlsrv:Server=' . $settings['hostname'] . ';Database=' . $settings['database'];
|
$dsn = $settings['driver'] . ':';
|
||||||
|
|
||||||
if (! empty($settings['port'])) {
|
// exactly one of hostname/DSN needed, port is optional
|
||||||
$dsn .= ';port=' . $settings['port'];
|
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'])) {
|
if (isset($settings['schema_table'])) {
|
||||||
$this->schemaTable = $settings['schema_table'];
|
$this->schemaTable = $settings['schema_table'];
|
||||||
|
|||||||
@@ -32,6 +32,10 @@ class DriverFactory
|
|||||||
switch ($settings['driver']) {
|
switch ($settings['driver']) {
|
||||||
case 'sqlite':
|
case 'sqlite':
|
||||||
return new Sqlite($settings);
|
return new Sqlite($settings);
|
||||||
|
case 'odbc':
|
||||||
|
return new Mssql($settings);
|
||||||
|
case 'dblib':
|
||||||
|
return new Mssql($settings);
|
||||||
case 'mssql':
|
case 'mssql':
|
||||||
return new Mssql($settings);
|
return new Mssql($settings);
|
||||||
case 'mysql':
|
case 'mysql':
|
||||||
|
|||||||
Reference in New Issue
Block a user