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

fis*_*g3r 10 php windows-authentication sql-server-2008

我在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);
Run Code Online (Sandbox Code Playgroud)

因为我使用PHP 5.3.1 sqlsrv_connect不是一个选项.我试图加载它的PHP驱动程序,但它只是没有工作.我无法更改sql server的身份验证,我也无法使用任何其他版本的PHP.

我也无法打开secure_connection,因为我必须能够连接到需要"正常"sql身份验证的其他sql服务器:

mssql.secure_connection = Off

如何连接到我有问题的SQL服务器?

更新:升级xampp到最新版本.PHP现在版本5.6.8我仍然无法使用,sqlsrv_connect()即使我安装了必要的驱动程序并添加了每个单独的DLL php.ini.重启apache几次.任何线索?

错误消息:致命错误:调用未定义的函数sqlsrv_connect()

dan*_*317 7

好.如果不在服务器上调试服务器问题很难,但我已经用php和SQL Server做了很多,所以我会尽力分享我的经验.

首先,非常高兴您从5.3.1更新了PHP的版本是古老而且非常不安全.以下是您系统的一些健全性检查.这可能对你没有任何帮助,但所有这些都值得检查.

  1. 首先确保您可以使用SQL Server Management studio使用您提供的凭据连接到SQL Server.这意味着您在php中使用的凭据与Windows身份验证凭据相同.您应该能够同时拥有两个连接,以便您可以同时进行更改并测试连接.

    1. 启用tcp.sql server配置管理器 - > SQL Server网络配置 - > sqlexpress协议 - > tcp/ip(右键单击) - >属性 - >启用(是) - > ip地址 - > IPAll - > TCP端口1433 - >确定
    2. 启用sql server auth.选择服务器(右键单击) - >属性 - >安全性 - > sql server和windows身份验证模式 - >确定
    3. 在防火墙上打开sql server端口.Windows控制面板 - >系统和安全 - > Windows防火墙 - >高级设置 - >入站规则 - >新规则 - >端口 - > tcp - > 1433(或其他) - >允许连接 - >下一步 - >名称 - > sql服务器 - >完成 - >重启电脑.
    4. 当然如果你想通过非默认用户连接你需要添加用户:sql server - > security - > logins(右键单击) - >添加登录 - >服务器角色 - > sysadmin - > ok
    5. 如果你做任何这些更改重启sql server:sql server配置管理器 - > sql server services - > sql Server(右键单击) - > restart.
  2. 一旦你确认你可以连接管理工作室这里是php配置检查:

    1. 您可以通过创建仅包含其中的函数的php页面来查看扩展本身是否可用phpinfo().然后搜索pdo_sqlsrv.如果它存在,其余的检查可能不是必要的,但因为你已经工作了这么长时间,所以无论如何都要检查它们.
    2. 用于php的sql_srv扩展名应该是3.2版本的PHP 5.6,你可以在这里获得该库
    3. 版本3.2需要在此处提供操作系统扩展检查上一个链接的其他要求.您的操作系统可能使用与此处链接的扩展名不同的扩展名.
    4. 找到你的php扩展目录.这通常是{php-install-directory}/ext.确保将下载的sqlsrv库的相应版本复制到此目录中.我的名字叫做"php_sqlsrv_55_ts.dll"和"php_dpo_sqlsrv_55_ts.dll"你认为你的56而不是55我认为"ts"应该与你的php安装相匹配."ts"表示线程安全,另一个选项是"nts"而不是线程安全.你使用的那个取决于你的PHP安装.
    5. 我的php.ini文件包含这些行extension=php_sqlsrv_55_ts.dll并按此extension=php_pdo_sqlsrv_55_ts.dll顺序.但我不认为秩序很重要.再次,你的将是56,而"ts"可能是"nts".
    6. 如果您根据这些进行了任何更改,请确保重新启动apache,然后检查pdo_sqlsrv是否在您的phpinfo()报告中.在重新启动apache后,请检查apache和php错误日志,看看是否有关于php尝试加载扩展的特定错误.如果你需要帮助,请在这里发布.
  3. 一旦通过管理工作室中的auth creditionals连接到sql server并在phpinfo()中查看pdo_sqlsrv,这里是您在代码中查看的最后一件事.

    1. 您上面的代码仍然是针对mssql扩展的.您可能只是没有使用最新更改进行更新.对于sql server扩展,您的代码应如下所示:

      $connectionInfo = array( 'UID' => $dbuser, 'PWD' => $dbpass, 'LoginTimeout' => 1, ); $host = $host . ', ' . $port; $connection = sqlsrv_connect($host, $connectionInfo); $error_messages = sqlsrv_errors();

    2. 对于Windows身份验证,请排除uid和pwd.

      $connectionInfo = array(); $conn = sqlsrv_connect( $host, $connectionInfo);

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