在宝塔Linux面板环境中为PHP7.4安装SQL Server扩展(pdo_sqlsrv和sqlsrv)是连接Microsoft SQL Server数据库的关键步骤。本文将详细介绍从环境准备到ThinkPHP配置的完整流程,帮助开发者快速搭建PHP与SQL Server的连接环境。
一、环境准备与依赖安装
1.1 系统要求确认
在开始安装前,需要确认系统环境满足以下要求:
- 操作系统:CentOS 7.x或Ubuntu 16.04及以上版本
- PHP版本:PHP 7.4(宝塔面板默认安装路径为/www/server/php/74)
- 宝塔面板:已安装并正常运行
- 网络环境:服务器可访问外网,用于下载扩展包
1.2 添加微软官方源
由于SQL Server扩展需要微软官方的ODBC驱动支持,首先需要添加微软的软件源:
# 添加微软官方源
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlrelease.repo
注意事项:
- 如果系统是CentOS 8或更高版本,需要将rhel/7改为对应的版本号
- 执行命令后会在/etc/yum.repos.d/目录下生成mssqlrelease.repo文件
1.3 安装ODBC驱动和必要组件
执行以下命令安装SQL Server连接所需的ODBC驱动和工具:
# 安装必要的驱动和工具
yum install msodbcsql mssql-tools unixODBC-devel
参数说明:
msodbcsql:Microsoft ODBC Driver for SQL Servermssql-tools:SQL Server命令行工具unixODBC-devel:ODBC开发库
二、安装pdo_sqlsrv扩展
2.1 下载pdo_sqlsrv扩展包
进入合适的目录下载扩展包:
# 创建安装目录
mkdir -p /www/server/sqlsrv
cd /www/server/sqlsrv
# 下载pdo_sqlsrv扩展包
wget http://pecl.php.net/get/pdo_sqlsrv-5.10.1.tgz
版本选择建议:
- PHP 7.4建议使用pdo_sqlsrv 5.10.x版本
- 可访问http://pecl.php.net/package/pdo_sqlsrv查看最新版本
2.2 解压并进入扩展目录
# 解压扩展包
tar -zxvf pdo_sqlsrv-5.10.1.tgz
# 进入解压后的目录
cd pdo_sqlsrv-5.10.1
2.3 编译安装扩展
使用PHP的phpize工具生成配置脚本并编译安装:
# 使用php7.4的phpize生成configure文件
/www/server/php/74/bin/phpize
# 配置编译参数
./configure --with-php-config=/www/server/php/74/bin/php-config
# 编译并安装
make && make install
关键步骤说明:
phpize:为PHP扩展生成configure脚本--with-php-config:指定PHP配置文件的路径make install:将编译好的扩展安装到PHP扩展目录
2.4 配置PHP加载扩展
安装完成后,需要在php.ini文件中添加扩展配置:
# 在php.ini中添加扩展配置
echo "extension = pdo_sqlsrv.so" >> /www/server/php/74/etc/php.ini
扩展路径说明:
编译后的扩展文件通常位于:
/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/pdo_sqlsrv.so
三、安装sqlsrv扩展
3.1 下载sqlsrv扩展包
# 返回安装目录
cd /www/server/sqlsrv
# 下载sqlsrv扩展包
wget http://pecl.php.net/get/sqlsrv-5.10.1.tgz
3.2 解压并编译安装
# 解压扩展包
tar -zxvf sqlsrv-5.10.1.tgz
# 进入解压后的目录
cd sqlsrv-5.10.1
# 使用phpize生成configure文件
/www/server/php/74/bin/phpize
# 配置编译参数
./configure --with-php-config=/www/server/php/74/bin/php-config
# 编译并安装
make && make install
3.3 配置PHP加载扩展
# 在php.ini中添加扩展配置
echo "extension = sqlsrv.so" >> /www/server/php/74/etc/php.ini
四、验证安装结果
4.1 重启PHP服务
# 重启PHP-FPM服务
systemctl restart php-fpm-74
# 或使用宝塔面板重启
/www/server/php/74/etc/init.d/php-fpm-74 reload
4.2 检查扩展是否加载成功
# 查看已加载的扩展
/www/server/php/74/bin/php -m | grep -i sqlsrv
预期输出:
pdo_sqlsrv
sqlsrv
4.3 通过phpinfo验证
创建测试文件验证扩展是否正常工作:
# 创建测试文件
echo "<?php phpinfo(); ?>" > /www/wwwroot/test.php
在浏览器中访问http://服务器IP/test.php,搜索”sqlsrv”或”pdo_sqlsrv”,确认扩展已正确加载。
五、ThinkPHP数据库配置
5.1 配置database.php文件
在ThinkPHP项目中,打开application/database.php文件,添加SQL Server数据库配置:
<?php
return [
// 默认数据库连接配置
'default' => [
// 数据库类型
'type' => 'sqlsrv',
// 服务器地址
'hostname' => 'localhost',
// 数据库名
'database' => 'your_database',
// 用户名
'username' => 'sa',
// 密码
'password' => 'your_password',
// 端口
'hostport' => '1433',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => '',
// 数据库调试模式
'debug' => true,
// 数据库部署方式 0 集中式 1 分布式
'deploy' => 0,
// 数据库读写是否分离
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否需要进行SQL性能分析
'sql_explain' => false,
],
];
5.2 多数据库配置
如果需要在ThinkPHP中同时连接多个数据库,可以配置如下:
<?php
return [
// 默认数据库连接
'default' => [
'type' => 'mysql',
'hostname' => 'localhost',
'database' => 'mysql_db',
'username' => 'root',
'password' => 'mysql_password',
'charset' => 'utf8',
],
// SQL Server数据库连接
'sqlserver' => [
'type' => 'sqlsrv',
'hostname' => 'localhost',
'database' => 'sqlserver_db',
'username' => 'sa',
'password' => 'sqlserver_password',
'hostport' => '1433',
'charset' => 'utf8',
],
];
5.3 使用多数据库连接
在控制器中使用不同的数据库连接:
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller
{
public function index()
{
// 使用默认数据库连接
$mysqlData = Db::table('users')->select();
// 使用SQL Server数据库连接
$sqlserverData = Db::connect('sqlserver')->table('customers')->select();
return json([
'mysql' => $mysqlData,
'sqlserver' => $sqlserverData
]);
}
}
六、常见问题与解决方案
6.1 扩展安装失败
问题描述:执行make命令时报错
解决方案:
- 检查是否安装了必要的编译工具:
yum install gcc gcc-c++ make - 确认PHP开发包已安装:
yum install php74-devel
6.2 扩展未加载
问题描述:php -m看不到扩展
解决方案:
- 检查扩展文件是否存在:
ls -la /www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/ - 确认php.ini中扩展路径正确:
grep "extension.*sqlsrv" /www/server/php/74/etc/php.ini
6.3 连接数据库失败
问题描述:无法连接到SQL Server
解决方案:
- 确认SQL Server服务已启动
- 检查防火墙是否开放1433端口:
firewall-cmd --list-ports firewall-cmd --add-port=1433/tcp --permanent firewall-cmd --reload - 确认SQL Server允许远程连接
6.4 字符集问题
问题描述:中文显示乱码
解决方案:
在ThinkPHP配置中设置正确的字符集:
'charset' => 'utf8',
七、性能优化建议
7.1 连接池配置
在ThinkPHP配置中启用连接池:
'params' => [
// 连接池配置
\PDO::ATTR_PERSISTENT => true,
// 最大连接数
\PDO::ATTR_MAX_CONNECTIONS => 100,
],
7.2 查询缓存
启用SQL Server查询缓存:
'params' => [
// 启用查询缓存
\PDO::SQLSRV_ATTR_ENCODING => \PDO::SQLSRV_ENCODING_UTF8,
\PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 30,
],
八、安全配置建议
8.1 使用加密连接
在ThinkPHP配置中启用SSL加密:
'params' => [
// 启用SSL加密
\PDO::SQLSRV_ATTR_ENCRYPT => true,
\PDO::SQLSRV_ATTR_TRUST_SERVER_CERTIFICATE => false,
],
8.2 最小权限原则
为应用程序创建专用的数据库用户,并授予最小必要权限:
-- 创建只读用户
CREATE LOGIN app_user WITH PASSWORD = 'StrongPassword123!';
CREATE USER app_user FOR LOGIN app_user;
EXEC sp_addrolemember 'db_datareader', 'app_user';
九、监控与日志
9.1 启用SQL Server日志
在ThinkPHP配置中启用数据库调试:
'debug' => true,
9.2 查看连接状态
使用以下SQL查询当前连接信息:
SELECT
session_id,
login_name,
host_name,
program_name,
status
FROM sys.dm_exec_sessions
WHERE is_user_process = 1;
十、总结
通过以上步骤,我们成功在宝塔面板PHP7.4环境中安装了pdo_sqlsrv和sqlsrv扩展,并配置了ThinkPHP与SQL Server的连接。关键点总结如下:
- 环境准备:添加微软源并安装ODBC驱动
- 扩展安装:分别编译安装pdo_sqlsrv和sqlsrv扩展
- 配置验证:通过phpinfo和命令行验证扩展加载
- ThinkPHP配置:正确配置database.php文件
- 问题排查:掌握常见问题的解决方法
在实际生产环境中,建议结合业务需求进行性能优化和安全加固,确保数据库连接的稳定性和安全性。
若内容若侵犯到您的权益,请发送邮件至:platform_service@jienda.com我们将第一时间处理!
所有资源仅限于参考和学习,版权归JienDa作者所有,更多请访问JienDa首页。





