You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:22:09