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

PHP 5.3+ 連接 Microsoft SQL Server 完整解決方案

     編輯:PHP 相關知識

問題根源

自 PHP 5.3 起,官方移除了舊版 mssql 擴展(mssql_connect 等函數),導致大量遷移專案無法直接連接 SQL Server。微軟官方提供了 SQLSRV 驅動作為替代方案,支援 PHP 5.3~7.x 及 Windows/Linux 環境。

Windows 環境安裝步驟

  1. 下載驅動包:訪問 Microsoft Drivers for PHP for SQL Server,下載對應 PHP 版本(如 5.3/5.4/5.6/7.x)、線程安全性(TS/Non-TS)、VC 版本(VC9/VC11/VC14)的 SQLSRV*.exe。
  2. 解壓 DLL 到擴展目錄:將 php_pdo_sqlsrv_*_nts.dll 與 php_sqlsrv_*_nts.dll 複製到 php/ext 目錄。
  3. 修改 php.ini:在末尾添加:
[PHP_PDO_SQLSRV]
extension=php_pdo_sqlsrv_53_nts_vc9.dll
[PHP_SQLSRV]
extension=php_sqlsrv_53_nts_vc9.dll

注意:文件名需與實際下載的 DLL 完全一致,區分 TS/Non-TS 及 VC 版本。

  1. 重啟 Web 服務:Apache 執行 httpd -k restart,Nginx + PHP-FPM 執行 service php-fpm restart。
  2. 驗證安裝:php -m | findstr sqlsrv 或 phpinfo() 搜尋「sqlsrv」與「pdo_sqlsrv」。

必要運行時組件

  • Microsoft ODBC Driver for SQL Server:SQLSRV 依賴此 ODBC 驅動,需單獨下載安裝(官方下載頁)。
  • SQL Server Native Client(連接 SQL Server 2005/2008):下載地址。

PHP 連接代碼範例

方式一:sqlsrv 原生函數(推薦)

<?php
$serverName = "127.0.0.1"; // 或 "(local)"
$connectionInfo = array(
    "UID" => "sa",
    "PWD" => "your_password",
    "Database" => "master",
    "CharacterSet" => "UTF-8" // 解決中文亂碼
);
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
    die(print_r(sqlsrv_errors(), true));
}
echo "連接成功!";

// 查詢示例
$sql = "SELECT TOP 10 * FROM sys.tables";
$stmt = sqlsrv_query($conn, $sql);
if ($stmt === false) die(print_r(sqlsrv_errors(), true));
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    print_r($row);
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>

方式二:PDO_SQLSRV(跨資料庫統一介面)

<?php
$dsn = "sqlsrv:Server=127.0.0.1;Database=master";
$user = "sa";
$pass = "your_password";
try {
    $pdo = new PDO($dsn, $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $pdo->query("SELECT @@VERSION");
    echo $stmt->fetchColumn();
} catch (PDOException $e) {
    echo "連接失敗:" . $e->getMessage();
}
?>

方式三:ODBC 通用連接(不依賴 SQLSRV)

<?php
$conn = odbc_connect(
    "Driver={ODBC Driver 17 for SQL Server};Server=127.0.0.1;Database=master;",
    "sa", "your_password"
);
if (!$conn) exit("ODBC 連接失敗");
$sql = "SELECT * FROM sys.databases";
$rs = odbc_exec($conn, $sql);
while ($row = odbc_fetch_array($rs)) {
    print_r($row);
}
odbc_close($conn);
?>

常見錯誤與排查

錯誤現象原因解決方法
Call to undefined function sqlsrv_connect()擴展未載入或 DLL 版本不匹配核對 php.ini、PHP 版本、TS/Non-TS、VC 版本;重啟服務
Connection failed: [Microsoft][ODBC Driver] SSL Provider: certificate chainSQL Server 強制加密且憑證不受信連接字串加 TrustServerCertificate=Yes 或配置有效憑證
中文亂碼字符集未指定連接參數加 CharacterSet=UTF-8;資料庫欄位用 nvarchar
Linux 環境連接失敗缺少 Microsoft ODBC Driver for Linux按官方文檔安裝 unixODBC + MS ODBC Driver 17/18

Linux (CentOS/Ubuntu) 部署要點

  1. 安裝 unixODBC:yum install unixODBC unixODBC-devel 或 apt-get install unixodbc unixodbc-dev。
  2. 安裝 Microsoft ODBC Driver 18:官方安裝指南。
  3. 安裝 PHP sqlsrv/pdo_sqlsrv:pecl install sqlsrv pdo_sqlsrv(需 php-devel、gcc、make)。
  4. 啟用擴展並重啟 PHP-FPM。

總結

PHP 5.3+ 連接 SQL Server 的標準路徑是「安裝 SQLSRV 擴展 + Microsoft ODBC Driver」。原生 sqlsrv 函數性能最佳,PDO 適合多資料庫抽象層,ODBC 適合不想安裝 SQLSRV 的場景。生產環境務必啟用加密連接、使用參數化查詢防注入,並配置連接池提升併發能力。

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