MSSQL из PHP: sqlsrv/pdo_sqlsrv, Docker и очень старый mssql_*
Современный путь: драйверы Microsoft
Для поддерживаемых версий PHP Microsoft публикует готовые инструкции для Ubuntu/Debian: ключ репозитория, пакет msodbcsql17 (или новее) и расширения sqlsrv/pdo_sqlsrv. В Docker часто копируют собранный .so из релиза msphpsql и подключают через drop-in в conf.d.
Пример фрагмента Dockerfile
RUN apt-get update && apt-get install -y gnupg curl && \
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \
curl https://packages.microsoft.com/config/ubuntu/19.10/prod.list > /etc/apt/sources.list.d/mssql-release.list && \
apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql17 && \
curl -L https://github.com/microsoft/msphpsql/releases/download/v5.9.0/Debian10-7.4.tar | \
tar -xO Debian10-7.4/php_pdo_sqlsrv_74_nts.so > \
/usr/local/lib/php/extensions/no-debug-non-zts-20190902/php_pdo_sqlsrv_74_nts.so && \
echo extension=php_pdo_sqlsrv_74_nts.so > /usr/local/etc/php/conf.d/sqlsrv.ini && \
php -m | grep pdo_sqlsrvВерсии тарбола и каталога расширений подставляйте под свой образ PHP.
Ошибки TLS/OpenSSL
На старых OpenSSL иногда помогает снижение SECLEVEL в /etc/ssl/openssl.cnf — это компромисс безопасности, применять только осознанно на изолированных контурах.
Проверки
php -m | grep pdo_sqlsrv
sqlcmd -S host -U user -P pass -d db -Q "SELECT @@VERSION"В Laravel после настройки соединения sqlsrv: DB::connection('sqlsrv')->select('select @@VERSION');
Наследие PHP 5 и mssql_*
Расширение mssql_* удалено из современных сборок; остаётся только как историческая справка. Для бинарных полей требовались лимиты:
mssql.textlimit = 2147483647
mssql.textsize = 2147483647$link = mssql_connect($server, $user, $pass);
mssql_select_db('DBNAME', $link);
$resp = mssql_query('SELECT * FROM Table', $link);
while ($row = mssql_fetch_assoc($resp)) {
var_dump($row);
}
mssql_free_result($resp);Экранирование для старого API
Если по какой-то причине остались запросы через устаревший слой, строки экранируют удвоением одинарных кавычек и вычищением управляющих символов — но лучше перейти на параметризованные запросы ODBC/sqlsrv.
Итог
Новые проекты ставят на sqlsrv/pdo_sqlsrv и проверяют цепочку через sqlcmd. mssql_connect упоминаем только при поддержке легаси.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии