我在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 server的身份验证,我无法使用任何其他版本的PHP。
我也无法打开secure_connection,因为我必须能够连接到需要" normal"的其他sql服务器。 sql身份验证:
mssql.secure_connection = Off
如何连接我有问题的sql server?
更新:将xampp
升级到最新版本。 PHP
现在是版本5.6.8
即使我安装了必要的驱动程序并将每个dll添加到sqlsrv_connect()
,我仍然无法使用php.ini
。多次重启apache
次。任何线索?
错误消息:致命错误:调用未定义函数sqlsrv_connect()
答案 0 :(得分:7)
确定。如果不在服务器上调试服务器问题很困难,但我已经用php和SQL Server做了很多工作,所以我会尽力分享我的经验。
首先,非常高兴您从5.3.1更新了PHP的版本是古老而且非常不安全。以下是您系统的一些健全性检查。这可能对你没有任何帮助,但所有这些都值得检查。
首先确保您可以使用SQL Server Management Studio使用您提供的凭据连接到sql server。这意味着您在php中使用的凭据与Windows身份验证凭据相同。您应该能够同时拥有两个连接,以便您可以同时进行更改并测试连接。
一旦确认可以与管理工作室联系,这里有php配置检查:
phpinfo()
的php页面来查看扩展本身是否可用。然后搜索 pdo_sqlsrv 。如果它存在,其余的检查可能没有必要,但是因为你已经这么长时间工作,所以无论如何都要检查它们。extension=php_sqlsrv_55_ts.dll
和extension=php_pdo_sqlsrv_55_ts.dll
。但我认为订单不重要。再次,你的年龄将是56岁和#34; ts"可能是" nts"。一旦通过管理工作室中的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);
如果您有更多问题,请告诉我哪个步骤不起作用,以便我们可以深入了解该步骤。
答案 1 :(得分:0)
返回到PHP 5.3.1堆栈,其中mssqlconnect()正在运行。 SQL Server集成模式需要经过身份验证的用户,该用户可以访问运行SQL Server的计算机。因此,如果您可以在SSMS中与用户建立连接,则需要使用用户的凭据启动XAMPP,Apache / httpd。如果apache作为服务运行,请转到服务面板(运行中的services.msc),然后转到Apache-> properties-> logon->'此帐户'并输入您的用户名和密码,以便apache服务与您的凭据一起运行,该凭据经过身份验证以连接到SQL Server实例。默认情况下,httpd是使用系统帐户运行的,显然未被远程计算机上的SQL Server验证,这让您头疼。