; php.ini
extension=php_mssql.dll ; 取消註釋
mssql.secure_connection = On ; 關鍵:啟用安全連接(NTLM 驗證)
ntwdblib.dll:版本極其關鍵,必須使用 2000.80.194.0 版本(舊版本導致連接失敗)https://webzila.com/dll/1/ntwdblib.zipsystem32、Apache bin 目錄(三選一或全放)php_mssql.dll:複製到 extension_dir 或 system32Path 新增:C:\PHP; C:\PHP\ext
注意:手動安裝 PHP 到 IIS 時,修改完配置需重啟機器,而非僅重啟 IIS。
<?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());
}
?>
<?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);
?>
| 錯誤現象 | 原因分析 | 解決方案 |
|---|---|---|
| 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 |
$stmt->execute([$param])