如何在MAMP环境下使用PHP连接MSSQL数据库?
mssql_connect()报错的问题 这个错误的核心原因很明确:mssql_connect()属于PHP旧版的MSSQL扩展,已经被官方废弃且默认不再随PHP(包括MAMP自带的PHP版本)分发,所以你的PHP环境里根本没有加载这个扩展,自然会提示函数未定义。
下面是一步一步的解决方案,亲测有效:
第一步:确认你的PHP版本和架构
先创建一个info.php文件放在MAMP的htdocs目录里,内容如下:<?php phpinfo(); ?>访问这个页面,找到
PHP Version(比如7.4.33)、Architecture(x86或x64)和Thread Safety(一般MAMP的PHP是启用TS的),这些信息是下载对应扩展的关键。第二步:下载微软官方的SQL Server扩展
你需要下载微软提供的sqlsrv和pdo_sqlsrv扩展(这是现在PHP连接MSSQL的官方推荐方案),要选择和你PHP版本、线程安全状态、架构完全匹配的dll文件。第三步:放置扩展文件到MAMP的PHP扩展目录
把下载好的两个dll文件(比如php_sqlsrv_74_ts_x64.dll和php_pdo_sqlsrv_74_ts_x64.dll)复制到MAMP的PHP扩展目录,路径一般是:C:\MAMP\bin\php\php[你的版本号]\ext\
比如你的PHP版本是7.4.33,路径就是C:\MAMP\bin\php\php7.4.33\ext\第四步:修改php.ini启用扩展
打开MAMP的PHP配置文件:在MAMP的Preferences窗口切换到PHP标签,点击Open php.ini按钮。在文件里找到Dynamic Extensions部分,添加以下两行(如果dll文件名带版本后缀,要写完整名称):extension=php_sqlsrv.dll extension=php_pdo_sqlsrv.dll第五步:重启MAMP并验证扩展加载
重启MAMP的Apache服务器,然后刷新之前的info.php页面,搜索sqlsrv和pdo_sqlsrv,如果能找到对应的模块信息,说明扩展已经加载成功。第六步:替换代码中的连接逻辑
现在你需要把原来的mssql_connect代码换成sqlsrv_connect的写法,举个实际的例子:
旧代码(mssql方式):$server = "your-mssql-server"; $user = "username"; $pass = "password"; $conn = mssql_connect($server, $user, $pass); if (!$conn) { die("连接失败"); }新代码(sqlsrv方式):
$serverName = "your-mssql-server"; // 格式可以是"IP\实例名"或者"IP,端口" $connectionOptions = [ "Database" => "your-db-name", "Uid" => "username", "PWD" => "password" ]; $conn = sqlsrv_connect($serverName, $connectionOptions); if ($conn === false) { die(print_r(sqlsrv_errors(), true)); // 打印详细错误信息方便排查 }
额外注意事项
- 如果你用的是PHP 7.0及以上版本,
mssql扩展已经被完全移除,没有任何办法再启用它,必须使用sqlsrv或pdo_sqlsrv - 下载扩展时一定要匹配线程安全(TS)状态,MAMP的PHP默认是TS版本,不要选NTS(非线程安全)的扩展
- 如果连接时还是报错,可以用
sqlsrv_errors()获取详细错误信息,这比模糊的报错更容易排查问题
内容的提问来源于stack exchange,提问作者Anu

