这是使用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)。错误消息是:
带有消息'SQLSTATE [28000]的异常'PDOException': [Microsoft] [SQL Server Native Client 10.0] [SQL Server]登录失败 用户'myDomain \ GEOFFREY-PC $'。'在C:\ wamp \ www \ PhpProject1 \ index.php:10 堆栈跟踪:#0 C:\ wamp \ www \ PhpProject1 \ index.php(10): PDO-&gt; __ construct('sqlsrv:Server = n ...',NULL,NULL)#1 {main}
网络服务器的连接字符串与本地服务器的连接字符串相同,只是服务器名称类似于abc0120,并且不以\ SQLEXPRESS或其他任何内容结束,并且数据库名称不同。我与网络服务器一起使用的数据库名称确实存在。
我正在使用Apache 2.2.11。 How to: Connect Using Windows Authentication的SQLServer 2005 MSDN页面读取:
运行Web服务器进程(或线程)的凭据必须映射到有效的SQL Server登录名才能建立连接。
也许这就是问题。
我也可以使用Windows身份验证连接到使用SQL Server Management Studio的网络服务器。
答案 0 :(得分:2)
从PHP手册中,您有以下示例:
<?php
/* Connect to an ODBC database using driver invocation */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
在您的示例中,省略了$user
和$password
参数。我会尝试指定用户名和密码,而不是传递null
;运行PHP脚本的用户可能与记录的用户不同...省略提供用户名和密码,PHP尝试提供运行脚本的用户凭据(甚至可能没有密码)在所有)。