php - 无法在 Windows 上使用 SQLSRV 驱动程序连接,但可以在 Linux 上使用 DBLIB - PHP & SQL Server 2012 Standard
问题描述
我正在尝试使用 Microsoft 提供的 PHP 驱动程序(称为“sqlsrv”)通过 Windows 连接到 SQL Server 2012(不是 express),但无论我做什么,它都无法工作。我尝试了所有方法,例如指定实例名称、协议、端口,但它不起作用。但是,它使用 DBLib 就像一个魅力,问题是由于一些安全问题,它在 Windows 上已被弃用。谢天谢地,生产和测试服务器都是基于 linux 的,所以我可以使用 DBLib,但不能在本地做任何事情。我们是一个 3 人的团队,我们在同一个目录和服务器上工作,这意味着使用 Git 基本上是没有意义的。我错过了什么吗?SQL Server 是否需要一些额外的配置才能工作?我的代码应该没问题,因为它可以完美地连接到 Azure SQL 专用服务器。
function SQLConn($h,$db,$user,$pass){
$dsn= 'sqlsrv:server='.$h.';database='.$db;
try {
$result = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
$result='Connection to SQL Server failed: ' . $e->getMessage(). "\n";
}
return $result;
}
它返回的错误是连接错误,例如:
SQLSTATE[08001]: [Microsoft][ODBC Driver 11 for SQL Server]Named Pipes Provider: Could not open a connection to SQL Server [2]
指定实例名称返回:
SQLSTATE[08001]: [Microsoft][ODBC Driver 11 for SQL Server]SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF]
使用 PHP 7.3。请帮助:C
解决方案
推荐阅读
- python - 编写 Min-Max 缩放函数
- reactjs - 自定义 React 大日历颜色
- ajax - 在 Laravel 中的 post 方法之后,无法通过 Ajax 调用重定向到新路由
- java - 是否可以将 ActionEvent 传递给标签上的“onMouseClick”?
- streamlink - Streamlink 如何在下载时寻找 X 分钟
- python - 让被调用的方法处理调用者类可以处理的业务是一种不好的做法吗?
- java - 如何使登录错误(“错误的用户名/密码”)在登录页面中更具体
- c - 试图理解 C 语法
- reactjs - 为什么要创建上下文而不仅仅是导出对象?
- typescript - 如何创建一个不会丢失泛型类型参数的类型保护