gpt4 book ai didi

php - 使用集成身份验证在 PHP 中连接到 MSSQL 服务器

转载 作者:可可西里 更新时间:2023-10-31 22:48:44 28 4
gpt4 key购买 nike

我在 MS Server 2012 R2 上运行 XAMPP。我需要连接到只接受集成的 win 身份验证的 MSSQL 服务器。
如果我只是尝试以下操作,我会在 SQL Server 上出现登录失败和错误日志,表明 SQL 身份验证不是一个选项。它只接受来自某个用户的连接。显然,PHP 脚本不是在该帐户下运行的。

$server = "sqlServerName";
$SQLUser = "username";
$SQLPass = "pw";
$SQLDatabase = "db";
$link = mssql_connect($server,$SQLUser,$SQLPass);

因为我使用的是 PHP 5.3.1 sqlsrv_connect不是一个选择。我试图为它加载 php 驱动程序,但它不起作用。我无法更改 sql 服务器的身份验证,也无法使用任何其他版本的 PHP。

我也无法打开 secure_connection,因为我必须能够连接到其他需要“正常”sql 身份验证的 sql 服务器:
mssql.secure_connection = Off
如何连接到我有问题的 sql 服务器?

更新 : 升级版 xampp到最新版本。 PHP现在是版本 5.6.8我还是不能用 sqlsrv_connect()即使我安装了必要的驱动程序并将每个 dll 添加到 php.ini .重启 apache几次。有什么线索吗?

error msg: Fatal error: Call to undefined function sqlsrv_connect()

最佳答案

好的。不在服务器上调试服务器问题是很困难的,但我在 php 和 SQL Server 方面做了很多工作,所以我会尽力分享我的经验。

首先,很高兴您从 5.3.1 更新该版本的 php 是古老且非常不安全的。以下是针对您的系统的一些健全性检查。这可能对您无济于事,但所有这些都值得检查。

  • 首先确保您可以使用 SQL Server Management Studio 使用您提供的凭据连接到 sql server。这意味着您在 php 中使用的凭据相同,而不是 Windows 身份验证凭据。您应该能够同时拥有两个连接,以便您可以同时进行更改和测试连接。
  • 启用 tcp。 sql server 配置管理器-> SQL Server 网络配置-> sqlexpress 协议(protocol)-> tcp/ip(右键单击)-> 属性-> 启用(是)-> ip 地址-> IPAll-> TCP 端口 1433-> ok
  • 启用 SQL Server 身份验证。选择服务器(右键单击)-> 属性-> 安全性-> sql server 和windows 身份验证模式-> ok
  • 在防火墙上打开 sql server 端口。 Windows 控制面板 -> 系统和安全 -> Windows 防火墙 -> 高级设置 -> 入站规则 -> 新规则 -> 端口 -> tcp -> 1433(或其他) -> 允许连接 -> 下一个 -> 名称 -> sql服务器-> 完成-> 重新启动计算机。
  • 当然如果你想通过非默认用户连接你需要添加用户:sql server -> security -> logins(右键单击)-> add login -> server roles -> sysadmin -> ok
  • 如果您进行以下任何更改,将重新启动 sql server: sql server 配置管理器 -> sql server services -> sql server(右键单击)-> 重新启动。
  • 一旦你确认你可以连接到管理工作室这里是 php 配置检查:
  • 您可以通过创建一个只有 phpinfo() 函数的 php 页面来查看扩展本身是否可用。然后搜索 pdo_sqlsrv 。如果存在,其余的这些检查可能不是必需的,但由于您已经工作了这么久,因此无论如何都可能会检查它们。
  • php 的 sql_srv 扩展应该是 php 5.6 的 3.2 版,您可以获得该库 here
  • 3.2 版需要可用的 os 扩展 here 检查上一个链接上的其他要求。您的操作系统可能使用与此处链接的扩展名不同的扩展名。
  • 找到您的 php 扩展目录。这通常是 {php-install-directory}/ext。确保将下载的 sqlsrv 库的适当版本复制到此目录中。我的被​​称为“php_sqlsrv_55_ts.dll”和“php_dpo_sqlsrv_55_ts.dll”,我认为您的将有 56 个而不是 55 个,并且“ts”应该与您的 php 安装相匹配。 “ts”表示线程安全,另一个选项是“nts”不是线程安全的。您使用的那个取决于您的 php 安装。
  • 我的 php.ini 文件按顺序包含这些行 extension=php_sqlsrv_55_ts.dllextension=php_pdo_sqlsrv_55_ts.dll。但我认为顺序不重要。再次你的将是 56 并且“ts”可能是“nts”。
  • 如果您根据这些进行了任何更改,请确保重新启动 apache,然后检查 pdo_sqlsrv 是否在您的 phpinfo() 报告中。同样在重新启动 apache 后,检查 apache 和 php 错误日志,看看您是否收到有关 php 尝试加载扩展的特定错误。如果您需要帮助,请在此处发布这些内容。
  • 通过管理工作室中的 auth creditionals 连接到 sql server 并在 phpinfo() 中查看 pdo_sqlsrv 后,这里是您代码中最后需要查看的内容。
  • 你上面的代码仍然是 mssql 扩展。您可能只是没有使用最新的更改来更新它。对于 sql server 扩展,您的代码应如下所示:
    $connectionInfo = array(
    'UID' => $dbuser,
    'PWD' => $dbpass,
    'LoginTimeout' => 1,
    );
    $host = $host . ', ' . $port;
    $connection = sqlsrv_connect($host, $connectionInfo);
    $error_messages = sqlsrv_errors();
  • 对于 Windows 身份验证,排除 uid 和 pwd。
    $connectionInfo = array();
    $conn = sqlsrv_connect( $host, $connectionInfo);

  • 如果您有更多问题,请告诉我哪个步骤不起作用,以便我们可以深入了解该步骤的更多细节。

    关于php - 使用集成身份验证在 PHP 中连接到 MSSQL 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30759539/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com