早期 PHP 使用 php_mssql.dll,需在 php.ini 啟用。但此擴充套件自 PHP 7.0 起已移除,不建議新專案使用。僅供維護舊系統參考:
$conn = mssql_connect("主機名或IP", "用戶名", "密碼");
if ($conn) echo "連線成功";
mssql_select_db("dbname");
$rs = mssql_query("SELECT TOP 1 id, username FROM tbname", $conn);
if ($row = mssql_fetch_array($rs)) {
$id = $row[0];
$username = $row[1];
}
mssql_free_result($rs);
mssql_close($conn);
微軟官方提供 Microsoft Drivers for PHP for SQL Server,支援 PHP 7.1+,功能完整且持續更新。
pdo_sqlsrv 與 sqlsrv DLL(或透過 PECL 安裝)。php.ini 加入:extension=pdo_sqlsrvextension=sqlsrvtry {
$dsn = "sqlsrv:Server=localhost;Database=testdb";
$pdo = new PDO($dsn, 'username', 'password', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
echo "連線成功";
} catch (PDOException $e) {
die("連線失敗: " . $e->getMessage());
}
// 查詢
$stmt = $pdo->query("SELECT TOP 1 id, username FROM tbname");
$row = $stmt->fetch();
if ($row) {
echo "ID: {$row['id']}, Username: {$row['username']}";
}
// 參數化查詢(防 SQL 注入)
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute(['user@example.com']);
$user = $stmt->fetch();
// 新增並取得自動遞增 ID
$pdo->exec("INSERT INTO tbname (username) VALUES ('nv')");
$lastId = $pdo->lastInsertId(); // 需 SQL Server 2005+ 且資料表有 IDENTITY 欄位
echo "新增 ID: $lastId";
$conn = sqlsrv_connect("localhost", [
"Database" => "testdb",
"UID" => "username",
"PWD" => "password",
"CharacterSet" => "UTF-8"
]);
if (!$conn) die(print_r(sqlsrv_errors(), true));
$sql = "SELECT * FROM tbname WHERE id = ?";
$stmt = sqlsrv_query($conn, $sql, [1]);
if ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
print_r($row);
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
Server=host,port、Encrypt=1、TrustServerCertificate=1 等選項。datetime、decimal、uniqueidentifier 等會自動轉為 PHP 物件或字串。beginTransaction()/commit()/rollBack()。若維護舊專案,建議逐步改寫為 PDO,統一資料存取層,提升安全性與可維護性。新專務必使用官方驅動。