首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 連接 MSSQL 數據庫完整指南:配置、代碼與常見問題排查

     編輯:PHP 相關知識

環境準備:Windows + Apache + PHP + SQL Server

1. PHP 擴展啟用

; php.ini
extension=php_mssql.dll        ; 取消註釋
mssql.secure_connection = On   ; 關鍵:啟用安全連接(NTLM 驗證)

2. 關鍵 DLL 文件部署

  • ntwdblib.dll:版本極其關鍵,必須使用 2000.80.194.0 版本(舊版本導致連接失敗)
  • 下載地址:https://webzila.com/dll/1/ntwdblib.zip
  • 部署位置:PHP 目錄、system32、Apache bin 目錄(三選一或全放)
  • php_mssql.dll:複製到 extension_dir 或 system32

3. SQL Server 服務端配置

  1. SQL Server Configuration Manager → Protocols
  2. 啟用 Named Pipes 和 TCP/IP
  3. TCP/IP 屬性 → IP Addresses 標籤 → TCP Dynamic Ports 設置為 1433
  4. 重啟 SQL Server 服務

4. 系統環境變量

Path 新增:C:\PHP; C:\PHP\ext

注意:手動安裝 PHP 到 IIS 時,修改完配置需重啟機器,而非僅重啟 IIS。

連接代碼範例

基本連接(PDO 推薦)

<?php
try {
    $dsn = "sqlsrv:Server=localhost;Database=gu_dde";
    $conn = new PDO($dsn, 'sa', '123456');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $stmt = $conn->query("SELECT * FROM dde_top");
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row[1] . "
"; } } catch (PDOException $e) { die("連接失敗: " . $e->getMessage()); } ?>

傳統 mssql_* 函數(不推薦新項目使用)

<?php
$conn = mssql_connect('localhost', 'sa', '123456');
if (!$conn) die("連接失敗");

mssql_select_db('gu_dde', $conn);
$query = "SELECT * FROM dde_top";
$result = mssql_query($query);

while ($row = mssql_fetch_array($result)) {
    echo $row[1] . "
"; } mssql_free_result($result); mssql_close($conn); ?>

常見問題 FAQ

錯誤現象原因分析解決方案
Call to undefined function mssql_connect()擴展未啟用或 DLL 缺失1. php.ini 啟用 extension=php_mssql.dll
2. 確認 extension_dir 路徑正確
3. php_mssql.dll + ntwdblib.dll 複製到 system32
4. 重啟 Apache/IIS
連接超時/拒絕防火牆、協議未啟用、端口錯誤1. 開放 1433 端口
2. SQL Server 啟用 TCP/IP、Named Pipes
3. 檢查客戶端別名配置
跨機器連接失敗主機名解析、MDAC 版本1. hosts 文件添加 IP-主機名映射
2. 安裝 SQL Server 客端工具/MDAC
中文亂碼字符集不匹配連接字符串指定 CharacterSet=UTF-8 或執行 SET NAMES

現代最佳實踐建議

  1. 優先使用 PDO_SQLSRV 或 SQLSRV 驅動:微軟官方維護、支持新特性、性能更好
  2. 連接池化:生產環境配置持久連接減少開銷
  3. 參數綁定:防止 SQL 注入,$stmt->execute([$param])
  4. 錯誤處理:統一異常捕獲,記錄詳細日誌
  5. 版本對應:PHP 7+ 必須用 sqlsrv/pdo_sqlsrv,mssql_* 已移除
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved