[英]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.