2013-01-17 190 views
0

我的環境:
- Windows Server 2008 R2。
- Apache Webserver。
- PHP 5.4.7使用SQL Server身份驗證代替Windows身份驗證的PDO和SQL Server

我剛剛下載並安裝了Microsoft SQL Server驅動程序3.0 for PHP。
我已將「php_pdo_sqlsrv_54_ts.dll」包含在php中。

Microsoft已經在驅動程序中包含了一個有用的chm文件(SQLSRV_Help.chm)。

在此幫助文件是有PDO例如使用Windows身份驗證:

/* Connect using Windows Authentication. */ 
try { 
    $conn = new PDO("sqlsrv:server=$serverName ; Database=AdventureWorks", "", ""); 
    $conn->setAttribute(PDO::ATTR ERRMOE, PDO::ERRMODE EXCEPTION); 
} 

但我必須連接到我們的MS SQL Server 2008 R2中使用SQL Server身份驗證!

有什麼區別是連接到SQL Server

  1. 使用PDO和Windows身份驗證
  2. 使用PDO和SQL Server身份驗證

難道僅僅是連接字符串之間?我必須寫:

$conn = new PDO("sqlsrv:server=$serverName; Database=AdventureWorks; UID=sa; PWD=abc"); 

還是我寫的:提前

$conn = new PDO("sqlsrv:server=$serverName; Database=AdventureWorks; User Id=sa; password=abc"); 

感謝

更新:

我發現了一個resoure:

http://www.connectionstrings.com/sql-server-2008

回答

2

有些情況下,指定用戶名和密碼as described here構造可選的第二個和第三個參數:

PDO :: __構建

創建一個SQL Server數據庫的連接。

語法PDO :: __結構($ DSN [,$用戶名[,$密碼 [,$ driver_options]]])

參數

$ DSN:包含前綴名稱的字符串(總是sqlsrv),冒號 和Server關鍵字。例如「sqlsrv:server =(local)」。您可以 (可選)指定其他連接關鍵字。有關服務器關鍵字和其他連接 關鍵字的說明,請參閱連接選項 。整個$ dsn用引號標出,因此每個連接 關鍵字不應單獨引用。

$ username:可選。包含用戶名稱的字符串。要使用SQL Server身份驗證連接到 ,請指定登錄ID。要使用Windows身份驗證連接到 ,請指定「」。

$ password:可選。包含用戶密碼的字符串。要使用SQL Server身份驗證連接到 ,請指定密碼。要使用Windows身份驗證連接到 ,請指定「」。

[...]

這意味着您可以使用PDO + SQL身份驗證這樣的連接到SQL Server:

$conn = new PDO(
    "sqlsrv:server=$serverName ; Database=AdventureWorks", 
    "sa", 
    "strong password" 
); 

connection options section還提到,您不能使用UIDPWD使用PDO_SQLSRV時連接字符串中的參數。

+0

謝謝薩爾曼A.第一部分有一個例子(sqlsrv:server =(local),但沒有例子說明如何編寫可選部分,我寫「UID = sa; PWD = a」或「用戶ID = sa;密碼= a」? –

相關問題