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_EXCEPTIONPDO по умолчанию молчит об ошибках — для продакшена режим исключений обязателен. - Следите за кодировкой:
UTF-8в DSN должен совпадать с фактической коллацией и настройкой FreeTDS. - Для новых установок при возможности переходят на поддерживаемый стек Microsoft ODBC/sqlsrv.
Итог
Короткий рецепт подключения через dblib: явный DSN, исключительный режим PDO и параметризованные запросы вместо конкатенации SQL.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии