ODBC (Open Database Connectivity) 是一套標準 API,讓應用程式能以統一介面存取不同資料庫 (Access、SQL Server、Oracle、MySQL 等)。PHP 透過 odbc_* 函數族群支援 ODBC 連接。
northwind。注意: DSN 必須建立在執行 PHP 的伺服器上。若網站託管於遠端主機,請要求主機商建立或改用無 DSN 連接字串 (DSN-less)。
| 函數 | 說明 |
|---|---|
odbc_connect($dsn, $user, $pass, $cursorType) | 建立連接,返回連接資源 |
odbc_pconnect() | 持久連接 |
odbc_exec($conn, $sql) | 執行 SQL,返回結果集資源 |
odbc_prepare() / odbc_execute() | 預處理/執行參數化查詢 |
odbc_fetch_row($result, $rowNumber) | 游標前進到下一列 (或指定列),成功返回 true |
odbc_result($result, $field) | 取得當前列的欄位值 (欄位編號或名稱) |
odbc_fetch_array() | 取得當前列為關聯+數字陣列 (PHP 4.0.6+) |
odbc_fetch_object() | 取得當前列為物件 |
odbc_num_rows($result) | 結果集列數 (某些驅動不支援) |
odbc_num_fields($result) | 欄位數 |
odbc_field_name($result, $index) | 取得欄位名稱 |
odbc_close($conn) | 關閉連接 |
odbc_error($conn) / odbc_errormsg($conn) | 取得錯誤代碼/訊息 |
<?php
$conn = odbc_connect('northwind', '', '');
if (!$conn) {
exit('連接失敗: ' . odbc_errormsg());
}
$sql = "SELECT * FROM customers";
$rs = odbc_exec($conn, $sql);
if (!$rs) {
exit('SQL 錯誤: ' . odbc_errormsg($conn));
}
echo "<table border='1' cellpadding='5'>
<tr><th>CompanyName</th><th>ContactName</th></tr>";
while (odbc_fetch_row($rs)) {
$comp = odbc_result($rs, 'CompanyName');
$cont = odbc_result($rs, 'ContactName');
echo "<tr><td>" . htmlspecialchars($comp) . "</td>";
echo "<td>" . htmlspecialchars($cont) . "</td></tr>";
}
echo "</table>";
odbc_close($conn);
?>
<?php
// Microsoft Access
$connStr = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\\path\\to\\db.accdb;";
// SQL Server
$connStr = "Driver={SQL Server};Server=192.168.1.100;Database=mydb;";
$conn = odbc_connect($connStr, 'username', 'password');
// 後續操作相同
?>
<?php
$stmt = odbc_prepare($conn, "SELECT * FROM users WHERE email = ?");
$email = 'test@example.com';
odbc_execute($stmt, [$email]);
while (odbc_fetch_row($stmt)) {
// ...
}
?>
CHARSET=UTF8。odbc_pconnect()、預處理語句、適當索引。pdo_odbc) 或原生驅動 (mysqli、pdo_sqlsrv、pdo_oci 等),功能更完整、社群支援更好。