PHP 連接 SQL Server 2000 使用 php_mssql.dll,但 2005/2008 需微軟官方 SQLSRV 驅動,不再相容舊擴展。
官方下載: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
以 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/
extension=php_sqlsrv_52_ts_vc6.dll
extension=php_pdo_sqlsrv_52_ts_vc6.dll
extension=php_pdo.dll ; 取消註解啟用 PDO 核心
重啟 Apache。
<?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);
?>
<?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());
}
?>
<?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");
?>
php -i | findstr "Compiler" 確認 VC6/VC9php -i | findstr "Thread Safety" 確認 enabled/disabledSQLSRV 驅動支援參數化查詢、交易控制、預存程序,是 PHP 連接現代 SQL Server 的標準方案。