IIS环境下PHP连接SQL Server失败:sqlsrv_connect函数未定义
PHP连接SQL Server报错:Call to undefined function sqlsrv_connect()
Fatal error: Uncaught Error: Call to undefined function sqlsrv_connect() in C:\inetpub\wwwroot\resolute\php\connection.php:7 Stack trace: #0 {main} thrown in C:\inetpub\wwwroot\resolute\php\connection.php on line 7
已确认php.info可正常访问,先后尝试PHP 8.3/8.2/8.1版本均失败,已将对应驱动放入ext文件夹并启用所需扩展,但问题依旧。
以下是连接代码:
<?php $serverName = "192.168.0.101, 5566"; //serverName\instanceName, portNumber (default is 1433) $connectionInfo = array( "Database"=>"DBname", "UID"=>"myuser", "PWD"=>"smypwd"); $connectionInfo = [ 'CharacterSet' => 'UTF-8', ]; $conn = sqlsrv_connect( $serverName, $connectionInfo); if( $conn === True) { echo "Connection established.<br />"; }else{ echo "Connection could not be established.<br />"; die( print_r( sqlsrv_errors(), true)); } ?>
排查与修复方案
- 严格匹配驱动与PHP版本:驱动必须对应PHP的版本(8.1/8.2/8.3)、线程安全模式(TS/NTS)、架构(x86/x64)。比如PHP是x64线程安全版8.2,就必须下载对应版本的
php_sqlsrv.dll和php_pdo_sqlsrv.dll。 - 验证php.ini配置:
- 确认
extension_dir指向正确的ext文件夹,示例:extension_dir = "C:/php/ext"(使用正斜杠避免路径解析问题)。 - 确保已添加扩展启用语句:
extension=php_sqlsrv.dll extension=php_pdo_sqlsrv.dll - 修改php.ini后必须重启IIS,否则配置不会生效。
- 确认
- 检查扩展加载状态:在php.info页面搜索
sqlsrv和pdo_sqlsrv,如果没有相关模块信息,说明扩展未正确加载,需重新检查驱动文件和配置。 - 修正代码错误:原代码中
$connectionInfo被重复赋值,数据库账号密码的配置被覆盖,导致连接缺少必要的认证参数,修正后的代码:<?php $serverName = "192.168.0.101, 5566"; $connectionInfo = [ "Database" => "DBname", "UID" => "myuser", "PWD" => "smypwd", 'CharacterSet' => 'UTF-8', ]; $conn = sqlsrv_connect($serverName, $connectionInfo); if ($conn) { echo "Connection established.<br />"; } else { echo "Connection could not be established.<br />"; die(print_r(sqlsrv_errors(), true)); } ?> - 安装系统依赖:SQL Server驱动依赖
Microsoft ODBC Driver for SQL Server,需安装对应版本(推荐ODBC 17或18),且与PHP架构保持一致。
内容的提问来源于stack exchange,提问作者Captain Sam
相关产品推荐
相关产品推荐

