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

PHP 連接 SQL Server 2005 完整排錯指南(Windows + IIS + PHP)

     編輯:PHP 綜合知識

環境基線

  • OS:Windows Server 2003 / 2008
  • Web:IIS 6.0 / 7.0
  • PHP:5.2 / 5.3 (VC6, Thread Safe)
  • DB:SQL Server 2005 (混合認證模式)

核心依賴:ntwdblib.dll 版本鎖定

PHP php_mssql.dll 依賴 ntwdblib.dll 與 SQL Server 通訊。**必須使用 2000.80.194.0 版本**(隨 SQL Server 2000 SP4 或 MDAC 2.8 安裝),新版本會導致連接失敗。

標準修復步驟

  1. 啟用擴展:php.ini 取消註釋 extension=php_mssql.dll
  2. 部署正確 DLL:
    • 下載 ntwdblib.dll (2000.80.194.0)
    • 覆蓋 C:\Windows\System32\ntwdblib.dll
    • 覆蓋 C:\PHP\ntwdblib.dll(PHP 安裝目錄)
    • 若仍失敗,將 php5ts.dll 複製到 System32
  3. SQL Server 配置管理器:
    • 啟用「命名管道」與「TCP/IP」協議
    • TCP/IP 屬性 → IP Addresses → TCP Dynamic Ports 設為 1433(或留空讓 SQL Browser 管理)
  4. 重啟服務:SQL Server、IIS、PHP (FastCGI)
  5. 連接字串:
    // 標準
    $conn = mssql_connect('localhost,1433', 'sa', 'password');
    // 或命名實例
    $conn = mssql_connect('HOST\INSTANCE', 'sa', 'password');

常見陷阱與對策

現象原因解決
mssql_connect 無報錯但返回 falsentwdblib.dll 版本不匹配強制替換為 2000.80.194.0,重啟 IIS
「Unable to connect to server」TCP/IP 未啟用或防火牆攔截 1433配置管理器啟用 TCP/IP,防火牆放行
「Login failed for user 'sa'」未啟用混合認證 / sa 密碼錯誤SSMS 登錄 → 屬性 → 安全性 → SQL Server 和 Windows 身份驗證
PHP 啟動報「Unable to load dynamic library php_mssql.dll」缺少 ntwdblib.dll 或版本錯誤按步驟 2 部署 DLL
mssql.secure_connection = On 導致連不上該選項強制 Windows 整合認證,需域環境設為 Off(默認),使用 SQL Server 認證

現代化遷移建議(棄用 mssql 擴展)

PHP 7.0+ **已移除** mssql 擴展。新項目請使用:

1. PDO_SQLSRV / SQLSRV (Microsoft 官方驅動)

<?php
// 安裝:pecl install sqlsrv pdo_sqlsrv (Linux) 或下載 DLL (Windows)
$dsn = 'sqlsrv:Server=localhost;Database=MyDB';
$pdo = new PDO($dsn, 'sa', 'password', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false,
]);

$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([1]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
?>

2. ODBC (通用方案)

$conn = odbc_connect('Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=MyDB;', 'sa', 'password');
$sql = "SELECT * FROM users";
$rs = odbc_exec($conn, $sql);
while (odbc_fetch_row($rs)) {
    echo odbc_result($rs, 'username');
}

驅動下載鏈接

總結

SQL Server 2005 + PHP mssql 擴展屬於「雙重遺產技術」。維護舊系統時,**鎖定 ntwdblib.dll 2000.80.194.0** 是核心關鍵。所有新開發務必遷移至 PDO_SQLSRV,獲得參數綁定、事務、預處理、現代錯誤處理等完整特性,並支援 SQL Server 2012/2016/2019/Azure SQL。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved