使用Windows身份验证时,以下是标准代码:
<?php
try {
$conn = new PDO("sqlsrv:Server=geoffrey-pc\SQLEXPRESS;Database=books",
NULL, NULL);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo $e;
die("Error connecting to SQL Server");
}
echo "Connected to SQL Server\n";
?>
以上适用于连接本地服务器(SQL Server 2008 Express Edition),但不适用于连接网络上的服务器(SQL Server Standard Edition)。错误信息如下:
exception 'PDOException' with message 'SQLSTATE[28000]: [Microsoft][SQL Server Native Client 10.0][SQL Server]Login failed for user 'myDomain\GEOFFREY-PC$'.' in C:\wamp\www\PhpProject1\index.php:10 Stack trace: #0 C:\wamp\www\PhpProject1\index.php(10): PDO->__construct('sqlsrv:Server=n...', NULL, NULL) #1 {main}
与本地服务器连接字符串相同,只是服务器名称类似于abc0120而不以\SQLEXPRESS或其他任何内容结尾,并且数据库名称不同。我使用网络服务器的数据库名称确实存在。
我正在使用Apache 2.2.11。针对如何使用Windows身份验证进行连接的SQL Server 2005 MSDN页面中写道:
Web服务器进程(或线程)运行的凭据必须映射到有效的SQL Server登录才能建立连接。
也许这就是问题所在。
我也可以使用Windows身份验证连接到网络服务器,使用SQL Server Management Studio。