odbc_connect() 允許 PHP 透過 ODBC (Open Database Connectivity) 介面連接各種資料庫 (Access, SQL Server, Oracle, DB2 等),實現跨平台資料存取。
resource odbc_connect(string $dsn, string $user, string $password [, int $cursor_type ])
<?php
$db_user = 'dbuser';
$db_pass = 'dbpass';
$dsn = 'my_odbc_dsn'; // 須先在控制台建立系統 DSN
$conn = odbc_connect($dsn, $db_user, $db_pass);
if ($conn) {
echo "成功連接到 ODBC 資料源
";
} else {
echo "連接失敗!
";
}
// 執行查詢
$sql = "SELECT * FROM usertable";
$result = odbc_exec($conn, $sql);
// 輸出 HTML 表格
echo "<table border='1'><tr><th>ID</th><th>Name</th><th>Address</th></tr>";
while (odbc_fetch_row($result)) {
echo "<tr>";
echo "<td>" . odbc_result($result, 1) . "</td>";
echo "<td>" . odbc_result($result, 2) . "</td>";
echo "<td>" . odbc_result($result, 3) . "</td>";
echo "</tr>";
}
echo "</table>";
// 釋放資源
odbc_free_result($result);
odbc_close($conn);
?>
<?php
$db_host = 'server.mynetwork';
$db_user = 'dbuser';
$db_pass = 'dbpass';
$dsn = 'remote_dsn';
$conn = odbc_pconnect($dsn, $db_user, $db_pass);
if ($conn) {
echo "持久連線開啟成功
";
}
// 嘗試關閉 (持久連線通常無法關閉)
if (odbc_close($conn)) {
echo "關閉成功 (罕見)
";
} else {
echo "無法關閉持久連線 (正常)
";
}
?>
| 函數 | 用途 |
|---|---|
| odbc_exec() | 執行 SQL 語句 |
| odbc_prepare() / odbc_execute() | 預處理語句 (防注入) |
| odbc_fetch_row() | 取得下一列 |
| odbc_result() | 取得欄位值 (索引或名稱) |
| odbc_fetch_array() | 取得關聯+數值陣列 |
| odbc_fetch_object() | 取得物件 |
| odbc_num_rows() | 取得列數 (部分驅動不支援) |
| odbc_num_fields() | 取得欄位數 |
| odbc_field_name() | 取得欄位名稱 |
| odbc_free_result() | 釋放結果集記憶體 |
| odbc_close() / odbc_close_all() | 關閉連線 |
| odbc_commit() / odbc_rollback() | 交易控制 |
| odbc_autocommit() | 設定自動提交 |
| odbc_columns() | 取得資料表欄位資訊 |
| odbc_columnprivileges() | 取得欄位權限 |
| odbc_tables() | 列出資料表 |
| odbc_primarykeys() | 取得主鍵資訊 |
| odbc_foreignkeys() | 取得外鍵資訊 |
| odbc_procedures() | 列出預存程序 |
| odbc_procedurecolumns() | 取得預存程序參數 |
<?php
$conn = @odbc_connect($dsn, $user, $pass);
if (!$conn) {
// 取得詳細錯誤訊息
$err = odbc_errormsg();
die("ODBC 連線失敗: $err");
}
$result = @odbc_exec($conn, $sql);
if (!$result) {
$err = odbc_errormsg($conn);
die("查詢失敗: $err");
}
?>
php_odbc.dll 擴充功能odbc_num_rows(),改用 SELECT COUNT(*)odbc_setoption() 調整逾時針對特定資料庫,建議使用原生驅動: