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

如何用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_x86
    
    要确保文件名和你放在C:\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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:17:47