使用Windows身份驗證時,這是標準的代碼:爲什麼我可以連接到本地SQL Server Express,但不能連接到PHP的遠程SQL Server?
<?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的版)上面的作品,而不是用於連接到服務器的網絡上(SQL Server標準版)。該錯誤信息是:
異常 'PDOException' 有消息「SQLSTATE [28000]: [微軟] [SQL Server本機客戶端10.0] [SQL服務器]登錄失敗, 用戶myDomain的\傑弗裏 - PC $ ''在C:\ wamp \ www \ PhpProject1 \ index.php中:10 堆棧跟蹤:#0 C:\ wamp \ www \ PhpProject1 \ index.php(10): PDO - > __ construct('sqlsrv:Server = n。 ..「,NULL,NULL)#1 {主}
用於網絡服務器的連接字符串相同的本地服務器,除了服務器名稱類似於abc0120,並且不與\結尾SQLEXPRESS或其他任何東西,而數據庫名稱是不同的。我用於網絡服務器的數據庫名稱確實存在。
我使用的是Apache 2.2.11。對於How to: Connect Using Windows Authentication SQLServer的2005 MSDN頁面上寫着:
下其Web服務器的進程(或線程)正在運行必須映射到一個有效的SQL Server登錄,以建立連接的憑據。
也許這就是問題所在。
我可以使用SQL Server Management Studio連接到網絡服務器,並使用Windows身份驗證。
將用於遠程服務器的連接字符串放在此處。 – Jacob
@cularis,除了服務器名稱與abc0120類似(並且不以\ SQLEXPRESS結尾)並且數據庫名稱不同(並且數據庫確實存在)之外,它與localserver相同。 – systemovich
PHP進程是否在遠程服務器上的SQL Server實例中知道的帳戶下運行?通常情況下,Management Studio將在您自己的帳戶下運行,但Web服務器不會。 – tdammers