php連接sql server的關(guān)鍵在于安裝驅(qū)動(dòng)、配置php.ini并確保sql server允許遠(yuǎn)程連接。1. 安裝sqlsrv和pdo_sqlsrv擴(kuò)展:從微軟github下載對(duì)應(yīng)php版本的驅(qū)動(dòng),復(fù)制dll文件到ext目錄,并在php.ini中添加擴(kuò)展引用。2. 安裝odbc驅(qū)動(dòng):推薦使用microsoft odbc driver 17,并通過(guò)odbc數(shù)據(jù)源管理器驗(yàn)證安裝。3. 編寫(xiě)連接代碼:可使用pdo或sqlsrv擴(kuò)展建立連接。4. 常見(jiàn)問(wèn)題包括防火墻阻止、sql server未啟用tcp/ip、驅(qū)動(dòng)未加載及版本不匹配,需逐一排查。
PHP連接SQL Server在windows環(huán)境下其實(shí)并不復(fù)雜,但對(duì)新手來(lái)說(shuō)可能會(huì)遇到一些配置問(wèn)題。關(guān)鍵在于正確安裝驅(qū)動(dòng)、設(shè)置php.ini文件,并確保SQL Server允許遠(yuǎn)程連接。
1. 安裝SQL Server驅(qū)動(dòng)
PHP默認(rèn)不自帶連接SQL Server的驅(qū)動(dòng),你需要手動(dòng)下載并安裝微軟提供的驅(qū)動(dòng)程序。目前主流使用的是sqlsrv和pdo_sqlsrv擴(kuò)展。
操作步驟:
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
- 前往微軟官方gitHub頁(yè)面下載對(duì)應(yīng)版本的驅(qū)動(dòng):https://www.php.cn/link/14ea332d0684051d9fef033a5f1607dd
- 解壓后找到兩個(gè)DLL文件(如 php_sqlsrv_80_ts.dll 和 php_pdo_sqlsrv_80_ts.dll),復(fù)制到你的PHP安裝目錄下的 ext 文件夾中。
- 打開(kāi) php.ini 文件,添加以下兩行:
extension=php_sqlsrv_80_ts.dll extension=php_pdo_sqlsrv_80_ts.dll
注意:根據(jù)你的PHP版本選擇合適的驅(qū)動(dòng),比如7.4、8.0等,還有ts(線程安全)和nts(非線程安全)的區(qū)別。
2. 配置ODBC驅(qū)動(dòng)支持
除了PHP擴(kuò)展,還需要安裝ODBC驅(qū)動(dòng)來(lái)支持連接SQL Server。
推薦安裝:
- Microsoft ODBC Driver 17 for SQL Server(適用于較新版本的Windows)
- 如果你用的是舊系統(tǒng),可能需要安裝ODBC Driver 11或13
你可以通過(guò)控制面板 → 管理工具 → ODBC 數(shù)據(jù)源管理器 來(lái)確認(rèn)是否已安裝成功。
3. 編寫(xiě)連接代碼
一旦環(huán)境配置好,就可以使用PDO或sqlsrv擴(kuò)展進(jìn)行連接了。下面是一個(gè)使用PDO的例子:
<?php $serverName = "your_server_name_or_ip"; $database = "your_database_name"; $username = "your_username"; $password = "your_password"; try { $conn = new PDO("sqlsrv:Server=$serverName;Database=$database", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "連接成功!"; } catch (PDOException $e) { echo "連接失敗: " . $e->getMessage(); } ?>
如果你更習(xí)慣使用sqlsrv函數(shù),也可以這樣寫(xiě):
<?php $serverName = "your_server_name_or_ip"; $connectionOptions = array( "Database" => "your_database_name", "Uid" => "your_username", "PWD" => "your_password" ); $conn = sqlsrv_connect($serverName, $connectionOptions); if ($conn === false) { die(print_r(sqlsrv_errors(), true)); } echo "連接成功!"; ?>
4. 常見(jiàn)問(wèn)題排查
有時(shí)候即使配置看起來(lái)沒(méi)問(wèn)題,也會(huì)出現(xiàn)連接失敗的情況。以下是一些常見(jiàn)原因:
- 防火墻阻止連接:檢查服務(wù)器端防火墻是否放行1433端口(SQL Server默認(rèn)端口)。
- SQL Server不允許遠(yuǎn)程連接:打開(kāi)SQL Server配置管理器 → SQL Server網(wǎng)絡(luò)配置 → 協(xié)議 → TCP/IP 啟用,并重啟服務(wù)。
- 驅(qū)動(dòng)未加載:運(yùn)行 php -m 查看 sqlsrv 或 pdo_sqlsrv 是否出現(xiàn)在模塊列表中。
- PHP版本與驅(qū)動(dòng)不匹配:一定要確認(rèn)你下載的dll是對(duì)應(yīng)當(dāng)前PHP的版本和線程類型。
基本上就這些。雖然步驟有點(diǎn)多,但只要一步步來(lái),問(wèn)題不大。重點(diǎn)還是版本匹配和驅(qū)動(dòng)安裝這兩個(gè)環(huán)節(jié)容易出錯(cuò)。