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

PHP 連接 SQL Server 2005/2008 (SQLSRV 驅動) 完整設定指南

     編輯:PHP 綜合知識

背景

PHP 連接 SQL Server 2000 使用 php_mssql.dll,但 2005/2008 需微軟官方 SQLSRV 驅動,不再相容舊擴展。

1. 下載驅動套件

官方下載:Microsoft SQL Server Driver for PHP

解壓後包含以下關鍵檔案(依 PHP 版本、VC 編譯器、Thread Safe 選擇):

  • php_sqlsrv_53_ts_vc9.dll — SQLSRV 驅動
  • php_pdo_sqlsrv_53_ts_vc9.dll — PDO SQLSRV 驅動
  • SQLServerDriverForPHP.chm — 完整文檔

命名規則:php_{pdo_}sqlsrv_{PHP版本}_{ts|nts}_vc{6|9}.dll

2. 安裝擴展

以 WAMP (PHP 5.2.6, Apache 2.2.8, VC6, Thread Safe) 為例:

複製 php_sqlsrv_52_ts_vc6.dll
複製 php_pdo_sqlsrv_52_ts_vc6.dll
至 wamp/bin/php/php5.2.6/ext/

3. 修改 php.ini

extension=php_sqlsrv_52_ts_vc6.dll
extension=php_pdo_sqlsrv_52_ts_vc6.dll
extension=php_pdo.dll  ; 取消註解啟用 PDO 核心

重啟 Apache。

4. 連線測試 (sqlsrv 原生)

<?php
$serverName = "SFKFK27EL8FJ\\SQLTRY";
$connInfo = array("Database"=>"try2", "UID"=>"sa", "PWD"=>"123");
$conn = sqlsrv_connect($serverName, $connInfo) or die("連線失敗!");

$sql = "SELECT * FROM usertable";
$stmt = sqlsrv_query($conn, $sql);
while ($row = sqlsrv_fetch_array($stmt)) {
    echo $row[1] . "<br />";
}
sqlsrv_close($conn);
?>

5. 連線測試 (PDO 方式,推薦)

<?php
try {
    $pdo = new PDO("sqlsrv:Server=SFKFK27EL8FJ\\SQLTRY;Database=try2", "sa", "123");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $pdo->query("SELECT * FROM usertable");
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        print_r($row);
    }
} catch (PDOException $e) {
    die("Error: " . $e->getMessage());
}
?>

6. 封裝資料庫類 (MVC 模式)

<?php
class DB {
    private $conn;
    public function __construct($host, $user, $pass, $db) {
        $info = array("UID"=>$user, "PWD"=>$pass, "Database"=>$db);
        $this->conn = sqlsrv_connect($host, $info);
    }
    public function query($sql) {
        return sqlsrv_query($this->conn, $sql);
    }
    public function getRow($sql) {
        $stmt = sqlsrv_query($this->conn, $sql);
        return sqlsrv_fetch_array($stmt);
    }
    public function getAll($sql) {
        $stmt = sqlsrv_query($this->conn, $sql);
        $rows = array();
        while ($row = sqlsrv_fetch_array($stmt)) $rows[] = $row;
        return $rows;
    }
    public function __destruct() {
        sqlsrv_close($this->conn);
    }
}

// 使用範例
$db = new DB(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$orders = $db->getAll("SELECT * FROM crm_order_batch WHERE (status=0 OR status IS NULL) AND lock_id IS NOT NULL");
?>

常見問題

  • VC 版本不符:執行 php -i | findstr "Compiler" 確認 VC6/VC9
  • Thread Safe 不符:php -i | findstr "Thread Safety" 確認 enabled/disabled
  • 缺少 ODBC 驅動:需安裝 Microsoft ODBC Driver for SQL Server
  • PHP 5.5+:需下載對應版本驅動 (v3.0+)

SQLSRV 驅動支援參數化查詢、交易控制、預存程序,是 PHP 連接現代 SQL Server 的標準方案。

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