簡體   English   中英

從PHP連接到MS SQL Server

[英]Connecting to MS SQL server from PHP

我正在嘗試從PHP連接到SQL Server數據庫,但是連接字符串有問題。 以下是我嘗試過的內容及其產生的影響:

運行PHP 5.3.13,Apache 2.2.22,Windows 7和SQL Server 2008 R2

我已經安裝了SQL Server Native Client 11.0

我放棄使用MSSQL驅動程序,而是使用SQLSRV驅動程序。

在php.ini中加載了這些擴展名:extension = php_pdo_sqlsrv_53_ts.dll,擴展名= php_sqlsrv_53_ts.dll,擴展名= php_pdo.dll。

phpinfo()將它們顯示為活動狀態:

Registered PHP Streams  php, file, glob, data, http, ftp, zip, compress.zlib, phar, sqlsrv
PDO drivers mysql, odbc, sqlite, sqlsrv
sqlsrv support  enabled

連接代碼如下:

$serverName = "[servername]";
$connectionInfo = array( "Database"=>"[databasename]");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn )
{
     echo "Connection established.\n";
}
else
{
     echo "Connection could not be established.\n";
     die( print_r( sqlsrv_errors(), true));
}

字符串設置為使用Windows身份驗證,sqlsrv_errors()報告:

[message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user '[networkname]\[machinename]'

我也使用網絡ID / pwd嘗試了此操作,導致

[message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user '[username]'

我確實知道數據庫已經建立並且可以正常運行,因為我可以從SQL Server客戶端和sqlcmd毫無問題地連接和運行查詢。 使用我的網絡/計算機憑據時,SQL Client和命令行可以正常工作。 當我嘗試使用用戶名/密碼時,命令行客戶端失敗。 這將表明任何PHP連接都應使用Windows身份驗證進行連接。

另一個線程中的某個人建議更改注冊表項中的權限將起作用,但這對我的問題沒有幫助。 PHP 5.3無法識別Native Client連接到MS SQL

我在創建系統DSN方面也取得了一些成功。 連接測試報告成功:

Microsoft SQL Server Native Client Version 11.00.2100

Running connectivity tests...

Attempting connection
Connection established
Verifying option settings
INFO: A network alias was found for the DSN server. 'Protocol: DBMSSOCN; Address:     [servername]' was used to establish the connection.
Disconnecting from server

TESTS COMPLETED SUCCESSFULLY!

我已經在stackoverflow.com和廣泛的互聯網之間進行了廣泛的搜索,沒有運氣。 顯然,使用其他方法可以使數據庫連接保持活動狀態,但是通過PHP連接時出了什么問題?

通過使用sql server身份驗證創建新的登錄名,我解決了這個問題。 我希望這對遇到類似問題的人有所幫助。

SQLSRV使用缺少UID (uid==NULL || strlen(uid) ==0)表示應嘗試在連接字符串中設置“可信連接”標志,即使用執行上下文隱含的憑據進行連接。

您不能顯式傳遞域登錄名和密碼(例如UID='MYDOMAIN\\user\u0026#39; )。

我在Microsoft的PHP驅動程序中遇到了一個奇怪的編譯器版本問題,並通過PHP的ODBC驅動程序解決了我的連接問題:

//$pdo = new PDO("sqlsrv:Server=$hostname;Database=$dbname;", $username, $password);  // works with proper driver for PHP.
$pdo = new PDO("odbc:Driver={SQL Server};Server=$hostname;Database=$dbname;", $username, $password);  // works with proper driver for ODBC and PHP ODBC.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM