Yandex Metrika
sanches.free

PDO и Microsoft SQL Server: DSN dblib, доменная учётка и режим ошибок

Когда уместен PDO + dblib

На Linux часто собирают PDO с драйвером dblib (FreeTDS). Это не замена официальным pdo_sqlsrv, но встречается в старых образах и хостингах, где уже поднят FreeTDS.

Подключение

private function connect(): void
{
    $dsn = sprintf(
        'dblib:host=%s;dbname=%s;charset=UTF-8;version=7.2',
        $this->config['db']['host'],
        $this->config['db']['db']
    );
    $user = $this->config['db']['user']; // при домене: "DOMAIN\\user"
    $this->pdo = new \PDO($dsn, $user, $this->config['db']['password']);
    $this->pdo->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC);
    $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
}

Версию протокола TDS подбирают под сервер; несовпадение версии — частая причина обрыва рукопожатия.

Запрос

private function getData(): void
{
    $statement = $this->pdo->prepare('SELECT 1 AS var');
    $statement->execute();
    $rows = $statement->fetchAll();
    var_dump($rows);
}

Практические замечания

  • Без ERRMODE_EXCEPTION PDO по умолчанию молчит об ошибках — для продакшена режим исключений обязателен.
  • Следите за кодировкой: UTF-8 в DSN должен совпадать с фактической коллацией и настройкой FreeTDS.
  • Для новых установок при возможности переходят на поддерживаемый стек Microsoft ODBC/sqlsrv.

Итог

Короткий рецепт подключения через dblib: явный DSN, исключительный режим PDO и параметризованные запросы вместо конкатенации SQL.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии