我正在尝试从 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 的连接出了什么问题?