2013-02-19 105 views
2

我試圖使用字符串連接:MS SQL SERVER,PHP,PDO,ODBC:用戶登錄失敗

odbc:Driver={SQL Server Native Client 11.0};Server=(localdb)\v11.0;Database=test;uid=sa;password=123321; 

結果:SQLSTATE [28000]的SQLDriverConnect:18456 [微軟] [SQL Server本機客戶端11.0] [SQL Server]用戶'sa'登錄失敗。

當我嘗試使用Windows ODBC數據源管理員連接時,連接成功。

問題可能在哪裏?

+1

在相關說明,你似乎使用Windows,所以[SQLSRV](http://php.net/sqlsrv)擴展,它也提供了一個[PDO驅動程序](http://www.php.net/manual/en/ref.pdo-sqlsrv.php),可能是ODBC的一個有趣的替代方案。 – 2013-02-19 08:51:03

+0

我嘗試過,但它甚至找不到實例(localdb)\ v11.0或使用cmd/sqllocaldb命令創建的實例 – Mansoor 2013-02-19 09:00:47

回答

4

網絡用戶'sa'沒有Microsoft SQL Server的權限。
爲網絡用戶提供對Microsoft SQL Server的訪問權限的最佳方式是創建一個Windows組(,例如EGUSERS),並允許在Microsoft SQL Server的安全登錄中對Windows組進行服務器訪問。
將需要訪問Microsoft SQL Server的所有網絡用戶放入Windows組(EGUSERS)。

+0

連接字符串應如何使用Windows組看起來像? – Mansoor 2013-02-19 09:01:49

+2

或如何使用Windows身份驗證通過ODBC進行連接? – Mansoor 2013-02-19 09:18:13

+2

請參閱[this](http://msdn.microsoft.com/zh-cn/library/ff647396.aspx)教程。 – omid 2013-02-19 09:22:41

1

檢查,如果你有MSSQL Server上設置的權限認證方式: https://msdn.microsoft.com/en-us/library/ms188670.aspx

你也有兩種方法通過使用採用給定的ODBC驅動程序PHP_PDO_ODBC分機連接通過PHP/PDO到MSSQL ConnectionString的或使用PHP_PDO_SQLSRV_xx_TS或PHP_PDO_SQLSRV_xx_NTS擴展,你可以在這裏找到https://www.microsoft.com/en-us/download/details.aspx?id=20098或使用PHP_PDO_SQLSRV_xx_(N)TS擴展時使用這裏的64位非官方http://robsphp.blogspot.nl/2012/06/unofficial-microsoft-sql-server-driver.html

連接字符串(僅適用於32位PHP!):

$hostname='127.0.0.1'; 
$dbname='test'; 
$username='user'; 
$password='pw'; 
$dbDB = new PDO("sqlsrv:Server=$hostname;Database=$dbname", $username, $password); 

連接字符串時使用PHP_PDO_ODBC擴展:(!)

//use any of these or check exact MSSQL ODBC drivername in "ODBC Data Source Administrator" 
$mssqldriver = '{SQL Server}'; 
$mssqldriver = '{SQL Server Native Client 11.0}'; 
$mssqldriver = '{ODBC Driver 11 for SQL Server}'; 

$hostname='127.0.0.1'; 
$dbname='test'; 
$username='user'; 
$password='pw'; 
$dbDB = new PDO("odbc:Driver=$mssqldriver;Server=$hostname;Database=$dbname", $username, $password); 

當測試其返回66條記錄使用PHP_PDO_ODBC擴展了〜500毫秒(所有三個MSSQL ODBC驅動程序),但使用64位時,一個簡單的查詢PHP_PDO_SQLSRV_TS花費了〜5000ms。慢10倍!還沒有嘗試32位或NTS變種。 我的開發電腦是Windows 7 SP1使用WAMPx64 PHP 5.5.12和我用PHP_PDO_SQLSRV_55_TS