0

我正在尝试从 PHP 连接到 SQL Server 数据库,但连接字符串出现问题。以下是我尝试过的内容及其效果的简要说明:

运行 PHP 5.3.13、Apache 2.2.22、Windows 7 和 SQL Server 2008 R2

我已经安装了 SQL Server Native Client 11.0

我已经放弃使用 MSSQL 驱动程序,而是使用 SQLSRV 驱动程序。

在 php.ini 中加载了这些扩展:extension=php_pdo_sqlsrv_53_ts.dll、extension=php_sqlsrv_53_ts.dll、extension=php_pdo.dll。

phpinfo() 将这些显示为活动:

Registered PHP Streams  php, file, glob, data, http, ftp, zip, compress.zlib, phar, sqlsrv
PDO drivers mysql, odbc, sqlite, sqlsrv
sqlsrv support  enabled

连接代码如下:

$serverName = "[servername]";
$connectionInfo = array( "Database"=>"[databasename]");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn )
{
     echo "Connection established.\n";
}
else
{
     echo "Connection could not be established.\n";
     die( print_r( sqlsrv_errors(), true));
}

该字符串设置为使用 Windows 身份验证,sqlsrv_errors() 报告:

[message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user '[networkname]\[machinename]'

我也尝试过使用我的网络 ID/密码,导致

[message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user '[username]'

我确实知道数据库已经启动并且可以正常工作,因为我可以从 SQL Server 客户端和 sqlcmd 毫无问题地连接和运行查询。使用我的网络/机器凭据时,SQL 客户端和命令行工作。当我尝试使用用户名/密码时,命令行客户端失败。这表明任何 PHP 连接都应使用 Windows 身份验证进行连接。

另一个线程中的某人建议更改注册表项中的权限会起作用,但这对我的问题没有帮助。PHP 5.3 无法识别 Native Client 以连接到 MS SQL

我在创建系统 DSN 方面也取得了一些成功。连接测试报告成功:

Microsoft SQL Server Native Client Version 11.00.2100

Running connectivity tests...

Attempting connection
Connection established
Verifying option settings
INFO: A network alias was found for the DSN server. 'Protocol: DBMSSOCN; Address:     [servername]' was used to establish the connection.
Disconnecting from server

TESTS COMPLETED SUCCESSFULLY!

我已经在 stackoverflow.com 中进行了广泛的搜索,并且通常没有运气。显然,使用其他方法的数据库连接是活动的,但是我通过 PHP 的连接出了什么问题?

4

3 回答 3

0

我在使用 Microsoft 的 PHP 驱动程序时遇到了一个奇怪的编译器版本问题,并解决了我与 PHP 的 ODBC 驱动程序的连接问题:

//$pdo = new PDO("sqlsrv:Server=$hostname;Database=$dbname;", $username, $password);  // works with proper driver for PHP.
$pdo = new PDO("odbc:Driver={SQL Server};Server=$hostname;Database=$dbname;", $username, $password);  // works with proper driver for ODBC and PHP ODBC.
于 2014-10-08T08:45:46.657 回答
0

我通过使用 sql server 身份验证创建新登录来解决这个问题。我希望这可以帮助有类似问题的人。

于 2013-06-27T13:07:57.630 回答
0

SQLSRV 使用 UID 的缺失(uid==NULL || strlen(uid) ==0)来指示它应该尝试在连接字符串中设置“受信任的连接”标志,即使用执行上下文所暗示的凭据进行连接。

您不能UID='MYDOMAIN\user'明确传递域登录名和密码(例如 )。

于 2014-02-19T20:32:46.270 回答