php操作數據庫有很多種方式,如mysql,mysqli,odbc,pdo等。MySQL 是 PHP 操作 MySQL 數據庫最原始的 Extension。MySQLi 的 i 代表 Improvement ,提供了相對進階的功能,就 Extension 而言,本身也增加了安全性,這都只是操作特定種類的數據庫的,當你更換其他類型的數據庫時又得使用其他類型數據庫的操作方法來操作數據庫,也就是得重寫代碼,這是很麻煩的。有沒有一種方法可以是通用型的,使得可以一次編寫多次使用,兼容各種數據庫呢?答案當然是肯定的,那就是obbc以及pdo了。pdo是php 5新出的用來操作各種數據庫的擴展,是專屬於php的,就類似於Java的jdbc。這個後面再講。現在先講一講odbc。
什麼是ODBC?
ODBC 是一個軟件驅動程序系統,用於連接編程語言與數據存儲。ODBC 是一個免費的開放源碼系統,出現於 1992 年,它試圖通過編程語言和數據庫查詢訪問(SQL 標准化)來標准化連接方法,比如功能和配置。
ODBC 的作用是充當接口或連接器,它具有雙重設計目標:首先,對於 ODBC 系統,它充當的是編程語言系統,其次,對於數據存儲系統,它充當的是 ODBC 系統。所以,ODBC 需要一個 “對 ODBC 而言是編程語言” 的驅動程序(例如 PHP-ODBC 庫)和一個 “對數據存儲系統而言是 ODBC” 的驅動程序(比如 MySQL-ODBC 庫)。除了 ODBC 系統本身之外,ODBC 還可以處理數據源的配置,允許數據源和編程語言之間存在模糊性。
怎麼使用odbc?
當使用odbc時, PHP 開發變得 “與數據庫連接器無關”。它對數據庫(比如 MySQL、PostgreSQL、SQLite、Microsoft SQL Server®、IBM® DB2®、Sybase、OpenLink Virtuoso、FileMaker 和 Microsoft Office® Access®)使用像 odbc_query()
這樣的函數。還可以將 ODBC 用於 CSV 和 Excel 電子表格,具體取決於正確的 ODBC 驅動程序設置。下面看看怎麼使用:
1.首先odbc擴展並開啟,通過phpinfo()查看到該模塊並且狀態為enabled;
2.連接到 ODBC
odbc_connect() 函數用於連接到 ODBC 數據源。該函數有四個參數:數據源名、用戶名、密碼以及可選的指針類型。
odbc_exec() 函數用於執行 SQL 語句。
3.取回記錄
//odbc_fetch_row() 函數用於從結果集中返回記錄。如果能夠返回行,則函數返回 true,否則返回 false。
//該函數有兩個參數:ODBC 結果標識符和可選的行號:
odbc_fetch_row($rs)
4.從記錄中取回字段
odbc_result() 函數用於從記錄中讀取字段。該函數有兩個參數:ODBC 結果標識符和字段編號或名稱。 下面的代碼行從記錄中返回第一個字段的值: $compname=odbc_result($rs,1);
下面的代碼行返回名為 "CompanyName" 的字段的值:
$compname=odbc_result($rs,"CompanyName");
5.關閉 ODBC 連接
odbc_close() 函數用於關閉 ODBC 連接。 odbc_close($conn);
注:其他操作函數:http://php.net/manual/zh/ref.uodbc.php
ODBC 實例
下面的實例展示了如何首先創建一個數據庫連接,接著創建一個結果集,然後在 HTML 表格中顯示數據。
<html> <body> <?php $conn=odbc_connect('northwind','',''); if (!$conn){
exit("Connection Failed: " . $conn);} $sql="SELECT * FROM customers"; $rs=odbc_exec($conn,$sql); if (!$rs){
exit("Error in SQL");} echo "<table><tr>"; echo "<th>Companyname</th>"; echo "<th>Contactname</th></tr>"; while (odbc_fetch_row($rs)){ $compname=odbc_result($rs,"CompanyName"); $conname=odbc_result($rs,"ContactName");
echo "<tr><td>$compname</td>"; echo "<td>$conname</td></tr>"; } odbc_close($conn); echo "</table>"; ?> </body> </html>