在日常工作中,涉及 Linux 环境下跨平台数据交互,特别是 PHP + SQL Server 的场景。
注意:在 Linux 中,SQLSRV 并不是直接“裸连” SQL Server,而是基于 ODBC 驱动再封装。
驱动链路如下:
PHP (sqlsrv 扩展 / pdo_sqlsrv 扩展)
↓
SQLSRV 驱动 (Microsoft Drivers for PHP for SQL Server)
↓
ODBC 驱动 (Microsoft ODBC Driver for SQL Server)
↓
SQL Server 数据库
1. 安装 ODBC 驱动和工具
确认系统版本(支持 16.04 / 18.04 / 20.04 / 22.04):
if ! [[ "16.04 18.04 20.04 22.04" == *"$(lsb_release -rs)"* ]]; then
echo "Ubuntu $(lsb_release -rs) is not currently supported.";
exit;
fi
添加微软源并安装:
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
# 安装 ODBC 驱动
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17
# 可选:安装命令行工具 bcp 和 sqlcmd
sudo ACCEPT_EULA=Y apt-get install -y mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# 可选:安装 unixODBC 开发头文件
sudo apt-get install -y unixodbc-dev
2. 配置 ODBC
配置文件位置可能因系统不同而异,通常涉及:
- /etc/odbcinst.ini → 驱动安装信息
- /etc/odbc.ini → DSN 配置
/etc/odbc.ini 示例:
[SQLSRV]
Driver = /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.6.so.1.1
Description = SQLSRV ODBC Driver DSN
Server = 192.168.1.100,1433 # 注意IP与端口之间用逗号
Port = 1433
测试连接:
isql -v SQLSRV 用户名 密码
3. 启用 PHP SQLSRV 扩展
下载 PHP 扩展(根据 PHP 版本选择合适的 release):
确认扩展目录:
php -i | grep extension_dir
移动下载的 sqlsrv.so 和 pdo_sqlsrv.so 到该目录,并在 php.ini 中启用:
extension=sqlsrv.so
extension=pdo_sqlsrv.so
4. 重启 PHP 服务
sudo systemctl restart php7.4-fpm # 按实际版本替换
5. 常见问题
错误 08001 (SSL/TLS 相关问题)
修改 /etc/ssl/openssl.cnf:
在文件首行添加:
openssl_conf = default_conf
在 [system_default_sect] 下调整:
# 可能默认是:
CipherString = DEFAULT:@SECLEVEL=2
# 修改为:
CipherString = DEFAULT:@SECLEVEL=0
🔑 总结
- ODBC 驱动:底层与 SQL Server 通信,必须先安装。
- SQLSRV 扩展:PHP 层接口,依赖 ODBC 驱动。
- Linux 下必须同时存在 才能正常使用 PHP 操作 SQL Server。