Вход Регистрация
Файл: vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php
Строк: 157
<?php

namespace DoctrineDBALDriverPDOSQLSrv;

use 
DoctrineDBALDriverAbstractSQLServerDriver;
use 
DoctrineDBALDriverAbstractSQLServerDriverExceptionPortWithoutHost;
use 
DoctrineDBALDriverException;
use 
DoctrineDBALDriverPDOConnection as PDOConnection;
use 
DoctrineDBALDriverPDOException as PDOException;
use 
PDO;
use 
SensitiveParameter;

use function 
is_int;
use function 
sprintf;

final class 
Driver extends AbstractSQLServerDriver
{
    
/**
     * {@inheritDoc}
     *
     * @return Connection
     */
    
public function connect(
        
#[SensitiveParameter]
        
array $params
    
) {
        
$driverOptions $dsnOptions = [];

        if (isset(
$params['driverOptions'])) {
            foreach (
$params['driverOptions'] as $option => $value) {
                if (
is_int($option)) {
                    
$driverOptions[$option] = $value;
                } else {
                    
$dsnOptions[$option] = $value;
                }
            }
        }

        if (! empty(
$params['persistent'])) {
            
$driverOptions[PDO::ATTR_PERSISTENT] = true;
        }

        
$safeParams $params;
        unset(
$safeParams['password'], $safeParams['url']);

        try {
            
$pdo = new PDO(
                
$this->constructDsn($safeParams$dsnOptions),
                
$params['user'] ?? '',
                
$params['password'] ?? '',
                
$driverOptions,
            );
        } catch (
PDOException $exception) {
            throw 
PDOException::new($exception);
        }

        return new 
Connection(new PDOConnection($pdo));
    }

    
/**
     * Constructs the Sqlsrv PDO DSN.
     *
     * @param mixed[]  $params
     * @param string[] $connectionOptions
     *
     * @throws Exception
     */
    
private function constructDsn(array $params, array $connectionOptions): string
    
{
        
$dsn 'sqlsrv:server=';

        if (isset(
$params['host'])) {
            
$dsn .= $params['host'];

            if (isset(
$params['port'])) {
                
$dsn .= ',' $params['port'];
            }
        } elseif (isset(
$params['port'])) {
            throw 
PortWithoutHost::new();
        }

        if (isset(
$params['dbname'])) {
            
$connectionOptions['Database'] = $params['dbname'];
        }

        if (isset(
$params['MultipleActiveResultSets'])) {
            
$connectionOptions['MultipleActiveResultSets'] = $params['MultipleActiveResultSets'] ? 'true' 'false';
        }

        return 
$dsn $this->getConnectionOptionsDsn($connectionOptions);
    }

    
/**
     * Converts a connection options array to the DSN
     *
     * @param string[] $connectionOptions
     */
    
private function getConnectionOptionsDsn(array $connectionOptions): string
    
{
        
$connectionOptionsDsn '';

        foreach (
$connectionOptions as $paramName => $paramValue) {
            
$connectionOptionsDsn .= sprintf(';%s=%s'$paramName$paramValue);
        }

        return 
$connectionOptionsDsn;
    }
}
Онлайн: 2
Реклама