PHP php_mssql.dll 依賴 ntwdblib.dll 與 SQL Server 通訊。**必須使用 2000.80.194.0 版本**(隨 SQL Server 2000 SP4 或 MDAC 2.8 安裝),新版本會導致連接失敗。
php.ini 取消註釋 extension=php_mssql.dllntwdblib.dll (2000.80.194.0)C:\Windows\System32\ntwdblib.dllC:\PHP\ntwdblib.dll(PHP 安裝目錄)php5ts.dll 複製到 System321433(或留空讓 SQL Browser 管理)// 標準
$conn = mssql_connect('localhost,1433', 'sa', 'password');
// 或命名實例
$conn = mssql_connect('HOST\INSTANCE', 'sa', 'password');
| 現象 | 原因 | 解決 |
|---|---|---|
| mssql_connect 無報錯但返回 false | ntwdblib.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 認證 |
PHP 7.0+ **已移除** mssql 擴展。新項目請使用:
<?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);
?>
$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');
}
pecl install sqlsrv pdo_sqlsrv + msodbcsql17SQL Server 2005 + PHP mssql 擴展屬於「雙重遺產技術」。維護舊系統時,**鎖定 ntwdblib.dll 2000.80.194.0** 是核心關鍵。所有新開發務必遷移至 PDO_SQLSRV,獲得參數綁定、事務、預處理、現代錯誤處理等完整特性,並支援 SQL Server 2012/2016/2019/Azure SQL。