PHP 7.2.4无法连接SQL Server 2008求助(CodeIgniter 3.1.8环境)
排查CodeIgniter连接SQL Server 2008失败的问题
首先得指出最核心的问题:你用的mysqli驱动是给MySQL数据库用的,完全不兼容SQL Server!这是导致连接失败的首要原因,咱们一步步来解决:
1. 更换兼容的数据库驱动
CodeIgniter 3支持两种适配SQL Server的驱动:sqlsrv(依赖微软官方的SQLSRV扩展)或者pdo(配合PDO_SQLSRV扩展),二选一即可。
2. 安装并启用SQL Server的PHP扩展
PHP 7.2需要匹配版本的微软官方扩展包,操作步骤如下:
- 下载对应你PHP版本(7.2.x)、系统架构(x86/x64)、线程安全(Apache环境一般用TS版)的扩展包
- 解压后把
php_sqlsrv_72_ts.dll和php_pdo_sqlsrv_72_ts.dll放到PHP安装目录的ext文件夹中 - 编辑
php.ini配置文件,添加两行启用扩展:extension=php_sqlsrv_72_ts.dll extension=php_pdo_sqlsrv_72_ts.dll - 重启Apache服务器,然后通过
phpinfo()页面确认扩展是否加载成功(搜索sqlsrv或pdo_sqlsrv,能找到相关模块信息即为成功)
3. 修正CodeIgniter数据库配置
根据你选择的驱动,修改application/config/database.php中的配置:
方案一:使用sqlsrv驱动
$db['default'] = array( 'dsn' => '', 'hostname' => 'localhost\SQLEXPRESS', // 注意:命名实例必须加\实例名,默认实例直接写localhost即可 'username' => 'root', // 替换为你的SQL Server用户名 'password' => '', // 对应用户密码 'database' => 'database_name', // 你的目标数据库名称 'dbdriver' => 'sqlsrv', // 关键:替换为sqlsrv驱动 'dbprefix' => '', 'pconnect' => FALSE, // SQL Server不推荐使用持久连接,建议设为FALSE 'db_debug' => TRUE, // 开启调试模式,方便查看具体错误信息 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, // 需要加密连接时可改为TRUE 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
方案二:使用PDO驱动
$db['default'] = array( 'dsn' => 'sqlsrv:Server=localhost\SQLEXPRESS;Database=database_name', // 直接指定DSN更简洁 'hostname' => '', 'username' => 'root', 'password' => '', 'database' => '', 'dbdriver' => 'pdo', // 关键:替换为pdo驱动 // 其余配置与sqlsrv方案一致即可 );
4. 检查SQL Server本身的连接设置
别忽略SQL Server端的配置,这也是常见的连接失败原因:
- 启用TCP/IP协议:打开SQL Server配置管理器,找到「SQL Server网络配置」,启用TCP/IP协议,之后重启SQL Server服务
- 防火墙放行端口:确保Windows防火墙允许SQL Server的默认端口1433通过
- 用户权限验证:确认你的SQL Server用户(比如root)拥有目标数据库的访问权限,且使用的是SQL Server身份验证(如果用Windows身份验证,需留空配置中的用户名密码,且Apache的运行账号要有数据库访问权限)
- 实例名称正确性:如果是SQL Server命名实例(如SQLEXPRESS),hostname必须写成
服务器名\实例名,不能仅写localhost
5. 先测试基础连接(排除CodeIgniter问题)
写一个简单的PHP脚本直接连接SQL Server,确认问题是否出在CodeIgniter层面:
<?php $serverName = "localhost\SQLEXPRESS"; // 替换为你的实例地址 $connectionOptions = array( "Database" => "database_name", "Uid" => "root", "PWD" => "" ); // 尝试建立连接 $conn = sqlsrv_connect($serverName, $connectionOptions); if($conn) { echo "数据库连接成功!"; } else { echo "连接失败,错误信息:"; die(print_r(sqlsrv_errors(), true)); } ?>
如果这个脚本报错,根据输出的错误信息针对性解决(比如用户名错误、实例名称不正确);如果脚本能成功连接,再回到CodeIgniter中调整配置即可。
6. 额外注意事项
- PHP 7.2与SQL Server 2008是兼容的,但一定要下载对应版本的微软扩展,避免版本不匹配
- CodeIgniter 3.1.8版本较旧,若遇到驱动相关的bug,可以考虑升级到CodeIgniter 3的最新稳定版
内容的提问来源于stack exchange,提问作者Salman Bukhari
相关产品推荐
相关产品推荐

