codeigniter连接sql server需三步:装对php驱动(ci2用mssql扩展,ci3用sqlsrv扩展且须版本严格匹配)、写准database.php配置(注意驱动名、hostname格式、pconnect设false)、正确调用result_array()等方法提取查询结果对象数据。

CodeIgniter 连接 SQL Server 不是单纯改几个配置就能通的,关键在三步:PHP 驱动装对、数据库配置写准、查询结果取法用对。尤其 CI2 和 CI3 的驱动名、扩展名、返回值处理方式都不同,混用必报错(比如 $this->conn_id 为空、sqlsrv_query() expects parameter 1 to be resource)。
确认并安装正确的 PHP SQL Server 驱动
CI2(如 2.2.x)和 CI3 对驱动要求不同,不能通用:
-
CI2 默认用
mssql驱动:需启用php_mssql.dll和php_pdo_mssql.dll(仅 Windows + SQL Server 2008 及更早版本支持,PHP ≤5.6) -
CI3 必须用
sqlsrv驱动:依赖微软官方《Microsoft Drivers for PHP for SQL Server》,对应 PHP 版本和线程安全(TS/NTS)必须严格匹配。例如 PHP 5.6 TS 要配php_sqlsrv_56_ts.dll和php_pdo_sqlsrv_56_ts.dll - 64 位系统别信“默认驱动”,官方驱动长期不支持 64 位 PHP,很多开发者最终靠非官方编译版解决
- 装完后务必重启 Web 服务,并用
phpinfo()确认sqlsrv或mssql模块已加载
正确配置 database.php(按 CI 版本区分)
配置错误是 $this->conn_id 为空的主因。注意驱动名、主机名格式、连接模式三处易错点:
-
CI2 示例(
dbdriver = 'mssql'):$db['default']['hostname'] = 'SERVERNAME\SQLEXPRESS';(实例名要带反斜杠)$db['default']['pconnect'] = FALSE;(MSSQL 不建议长连接,设为FALSE) -
CI3 示例(
dbdriver = 'sqlsrv'):$db['default']['hostname'] = '192.168.1.100';(IP 或主机名,不加实例名;实例名需在 SQL Server 配置管理器中确认是否启用 TCP/IP 并监听 1433)$db['default']['port'] = 1433;(显式指定端口更稳妥)$db['default']['pconnect'] = FALSE;(sqlsrv驱动不支持持久连接,必须设FALSE) - 统一建议:
db_debug = TRUE开启调试,char_set = 'utf8',dbcollat = 'SQL_Latin1_General_CP1_CI_AS'(SQL Server 推荐排序规则,比utf8_general_ci更兼容)
查询后必须调用结果方法,不能直接 echo 或 foreach
CI 执行 $this->db->query() 返回的是一个结果对象(如 CI_DB_sqlsrv_result),不是数组。直接 var_dump($query) 看不到数据,必须调用方法提取:
-
$query->result_array()→ 返回二维关联数组(最常用) -
$query->result()→ 返回对象数组(字段名作属性) -
$query->row_array()→ 取第一行,返回一维关联数组 -
$query->num_rows()→ 获取行数,判断是否有结果 - 错误写法:
foreach($query as $row) { ... }(会报错) - 正确写法:
foreach($query->result_array() as $row) { echo $row['name']; }
Linux 下连接 SQL Server 的替代方案
若部署在 Linux,PHP 原生不支持 sqlsrv,可用 ODBC 方案:
- 安装
unixODBC和微软 ODBC Driver for SQL Server - 配置
/etc/odbc.ini数据源,例如:[mydb]Driver = ODBC Driver 17 for SQL ServerServer = 10.0.0.5Database = myapp_db - 修改 CI3 的
sqlsrv驱动文件,将内部sqlsrv_*函数全部替换为odbc_*(如odbc_connect、odbc_exec),或使用社区维护的odbc兼容驱动











