如何用PHP和XAMPP连接SQL Server?及相关报错求助
解决XAMPP中PHP连接SQL Server的
sqlsrv_connect()未定义错误 + 完整连接指南 首先,你遇到的这个错误核心是PHP没成功加载SQL Server驱动,咱们一步步排查和解决:
一、先排查驱动匹配问题(最常见原因)
你已经下载了驱动并添加了extension,但很可能是驱动和你的PHP环境不匹配,这是最容易踩的坑:
先确认你的PHP环境参数:在XAMPP的
htdocs文件夹里新建一个phpinfo.php,内容是:<?php phpinfo(); ?>启动Apache后,在浏览器访问
http://localhost/phpinfo.php,找到这几个关键项:- PHP Version:比如7.3.29(必须和驱动的版本号完全对应,比如你用的是73的驱动,那PHP就得是7.3.x)
- Thread Safety:如果显示
Enabled,你需要用**TS(Thread Safe)**版本的驱动;如果是Disabled,才用NTS版本(你现在用的是NTS,先确认这个是不是匹配) - Architecture:看是x86还是x64,驱动的位数必须和这个一致
举个例子:如果你的PHP是7.3.x、Thread Safety Enabled、x86,那你应该下载
php_sqlsrv_73_ts_x86.dll和php_pdo_sqlsrv_73_ts_x86.dll,而不是NTS版本。
二、确认php.ini修改是否正确
- 你要确保修改的是Apache使用的php.ini,而不是CLI的。XAMPP里,Apache的php.ini路径是
C:\xampp\apache\bin\php.ini,而不是C:\xampp\php\php.ini(这个是命令行用的)。打开这个文件,检查你加的两行:
要确保文件名和你放在extension=php_pdo_sqlsrv_73_nts_x86 extension=php_sqlsrv_73_nts_x86C:\xampp\php\ext里的驱动文件名完全一致(可以省略.dll,PHP会自动识别)。 - 修改后必须重启Apache服务!在XAMPP控制面板里停止Apache再启动,不然配置不会生效。
三、安装ODBC驱动(容易被忽略的步骤)
SQL Server的PHP驱动依赖ODBC Driver才能和数据库通信,你需要安装ODBC Driver 17 for SQL Server(版本对应你的SQL Server,一般17版本兼容大多数新老SQL Server)。安装后不需要额外配置,驱动会自动调用它。
四、验证驱动是否加载成功
重启Apache后,再访问phpinfo.php,搜索sqlsrv或者pdo_sqlsrv:
- 如果能找到对应的模块信息,说明驱动加载成功了;如果找不到,回到前面的步骤重新检查版本匹配和php.ini配置。
五、编写连接SQL Server的代码
驱动加载成功后,就可以用下面的代码连接了:
示例1:SQL Server身份验证
<?php // 你的SQL Server实例名,比如本地的SQLEXPRESS,或者远程服务器IP $serverName = "localhost\SQLEXPRESS"; $dbName = "你的数据库名称"; $username = "数据库用户名"; $password = "数据库密码"; // 连接选项 $connectionOptions = [ "Database" => $dbName, "Uid" => $username, "PWD" => $password, "CharacterSet" => "UTF-8" // 防止中文乱码 ]; // 建立连接 $conn = sqlsrv_connect($serverName, $connectionOptions); if ($conn === false) { // 输出错误信息 die(print_r(sqlsrv_errors(), true)); } else { echo "成功连接到SQL Server数据库!"; // 这里可以执行SQL查询,比如: $sql = "SELECT * FROM 你的表名"; $stmt = sqlsrv_query($conn, $sql); if ($stmt === false) { die(print_r(sqlsrv_errors(), true)); } // 处理查询结果... // 关闭连接(脚本结束时会自动关闭,也可以手动关闭) sqlsrv_close($conn); } ?>
示例2:Windows身份验证(用当前Windows用户登录)
如果你的SQL Server设置了Windows身份验证,不需要用户名密码,连接选项改成:
$connectionOptions = [ "Database" => $dbName, "Authentication" => SQLSRV_AUTH_WINDOWS, "CharacterSet" => "UTF-8" ];
最后再检查几个小细节
- 确保SQL Server服务是启动状态(可以在Windows服务里找
SQL Server (你的实例名),比如SQL Server (SQLEXPRESS)) - 如果是远程连接,要确认SQL Server允许远程连接,并且防火墙开放了1433端口(默认端口)
内容的提问来源于stack exchange,提问作者Luiz Gustavo
相关产品推荐
相关产品推荐

