標籤:
1、簡要說明
ADODB是PHP中的一個通用的資料庫操作庫,ADODB目前支援MySQL、PostgreSQL、Oracle、Interbase、Microsoft SQL Server、Access、FoxPro、Sybase、ODBC及ADO,你可以從 http://php.weblogs.com/adodb下載 ADODB。
2、安裝
下載 tgz或 zip解壓即可。
3、使用
使用前包含進 adodb.inc.php即可
include("$adodb_path/adodb.inc.php"); // includes the adodb library
4、函數
全域函數幾乎只有一個
NewADOConnection(‘DataBaseType‘);
作用:產生一個ADOdb對象。
可以的值為: (不包括括弧裡的內容)
access (Microsoft Access/Jet)
ado (Generic ADO, the base for all the other ADO drivers)
ado_access (Microsoft Access/Jet using ADO)
ado_mssql (Microsoft SQL Server using ADO)
db2 (DB2)
vfp (Microsoft Visual FoxPro)
fbsql (FrontBase)
ibase (Interbase 6 or before)
firebird (Firebird)
informix72 (Informix databases before Informix 7.3)
informix (Informix)
maxsql (MySQL with transaction support)
mssql (Microsoft SQL Server 7)
mssqlpo (Portable mssql driver)
mysql (MySQL without transaction support)
mysqlt (MySQL with transaction support, identical to maxmysql)
oci8 (Oracle 8/9)
oci805 (Oracle 8.0.5)
oci8po (Oracle 8/9 portable driver)
odbc (Generic ODBC, the base for all the other ODBC drivers)
odbc_mssql (MSSQL via ODBC)
odbc_oracle (Oracle via ODBC)
oracle (Oracle 7)
postgres (PostgreSQL)
postgres64 (PostgreSQL 6.4)
postgres7 (PostgreSQL 7, currently identical to postgres )
sqlanywhere (Sybase SQL Anywhere)
sybase (Sybase)
rs2html 把 RecordSet 對象轉成html輸出
要包含 include(‘tohtml.inc.php‘);
5、對象
PHP ADODB與MS ADO 對象結構相似,
主要用到兩個對象 (ADOConnection 對象與 RecordSet 對象)
ADOConnection負責資料庫的串連,發送 sql 命令等;RecordSet主要是得到查詢出來的記錄集
6、ADOConnection 對象說明
1、建立
ADODB是用 NewADOConnection() 函數來建立一個 ADODB連線物件,如:
$db = NewADOConnection(‘$database_type‘); // A new connection
$database_type 是資料庫格式,可能值看上面 第4小節。
2、串連資料庫
用ADOConnection 的 Connect 方法,格式如下:
Connect("主機名稱","使用者名稱","使用者密碼","資料庫名");
傳回值,串連成功返回一個 ADOConnection對象,錯誤返回 FALSE,可以用 ADOConnection的 ErrorMsg()函數得到錯誤說明.
$db->Connect("$host", "$user", "$password", "$database_name");
3、執行SQL指令
用Execute函數執行 SQL 命令 如:
$result = $db->Execute("SELECT * FROM employees");
if ($result === false) die("failed");
執行成功返回一個 Recordset 對象,否則返回 FALSE
4、Affected_Rows()函數
Affected_Rows()函數返回最後一個 sql 命令所影響到的記錄行數。
5、日期格式
由於 ADODB需要支援不同的資料庫系統,而這些不同的資料庫可能用不同的方式來表示日期/時間格式。ADODB用 DBDate()函數來轉換不同資料庫之間的格式。
6、字串格式
不同的資料庫可以用不對的字串表示格式,如‘單括弧的表示方法。例:
$ID = 3
$TheDate=mktime(0,0,0,8,31,2001)
$Note= sugar why don‘t we call it off
$sql = "INSERT INTO table (id, thedate,note) values ("
. $ID . ‘,‘
. $db->DBDate($TheDate) .‘,‘
. $db->qstr($Note).")";
$db->Execute($sql);
7、Select指令的Limit及Top支援
$connection->SelectLimit($sql,$nrows,$offset);
注意:第二個參數是需要返回的行數,第三個參數才是從第幾行開始。
傳回值:成功返回一個Recordset 對象,失敗返回 FALSE; 對於分頁時相當有用。
8、Cache緩衝
CacheExecute 與 CacheSelectLimit 函數。
第一個參數為逾時時間,秒數。
ADODB允許你在你的檔案系統中暫存recordset的資料,並且在$connection->CacheExecute($secs2cache,$sql)及 $connection->CacheSelectLimit($secs2cache,$sql,$nrows,$offset)等設定的時間間隔到達之後,才真正去做資料庫的查詢以節省時間。
可以用 $ADODB_CACHE_DIR 來指定 Cache 目錄,好象要用絕對路徑。但逾時過後,PHP不能自動刪除cache,要人工手動刪除。
9、事務
StartTrans() 開始事務
CompleteTrans() 結束事務 ADODB 自動處理事務的提交與復原
HasFailedTrans() 事務是否成功 TRUE 成功,FALSE為失敗
大多數資料庫直持事務,但MySQL InnoDB表支援事務,而MyISAM表不支援。
10、SetFetchMode
設定 Recordset 對象的記錄集索引方式。如:
$db->SetFetchMode(ADODB_FETCH_ASSOC); // Return associative array
ADODB_FETCH_NUM; 以數字方式索引
12、GetInsertSQL , GetUpdateSQL
產生一個 Insert SQL , 有兩個參數,第一個是一個 RecordSet 第二個是一個數組。 例如:
$sql = "SELECT * FROM ADOXYZ WHERE id = -1"; # 從資料庫中查詢出一個空的資料集
$conn = &ADONewConnection("mysql"); # 建立一個連結
$conn->debug=1;
$conn->PConnect("localhost", "admin", "", "test"); # 連結到 MySQL, 資料庫名稱為 test
$rs = $conn->Execute($sql); # 執行查詢,並取得一個空的資料集
$record = array(); # 初始化一個陣列,以便存放記錄資料供新增用
# 設定記錄中的欄位值
$record["firstname"] = "Bob";
$record["lastname"] = "Smith";
$record["created"] = time();
# 傳入空的資料集及欄位資料陣列到GetInsertSQL函數中,以執行功能
# 這個函數將會依傳入的資料,回傳一個全格式的 INSERT SQL指令
$insertSQL = $conn->GetInsertSQL($rs, $record);
$conn->Execute($insertSQL); # 將記錄挿入資料庫中
#==========================
# 以下的程式碼測試更新狀態
$sql = "SELECT * FROM ADOXYZ WHERE id = 1";
# 選擇一筆記錄以便更新
$rs = $conn->Execute($sql); # 執行這個查詢,並取得一個存在的記錄來更新
$record = array(); # 初始化一個陣列,以存放要更新的資料
# 設定欄位裡的值
$record["firstname"] = "Caroline";
$record["lastname"] = "Smith"; # 更新 Caroline的姓由 Miranda 變成 Smith
# 傳入這個只有單一記錄的資料集以及含有資料的陣列到 GetUpdateSQL函數裡
# 函數將會回傳一個具有正確 WHERE 條件的 UPDATE(更新) SQL 指令
$updateSQL = $conn->GetUpdateSQL($rs, $record);
$conn->Execute($updateSQL); # 更新資料庫中的記錄
$conn->Close();
13、PageExecute 分頁查詢
如:PageExecute($sql, $num_of_rows_per_page, $curr_page);
可能用到的屬性 AtFirstPage() , AtLastPage(),AbsolutePage()
7、Recordset 對象
1、Move($Pos)
捲動目前的資料列,ADODB支援整個資料庫往前捲動,有一些資料庫並不支援往後的捲動,這倒不會是個問題,因為你能夠用暫存紀錄到快取來模擬往後捲動。
2、RecordCount() 或 RowCount()
傳回SQL指令存取到的紀錄筆數,有些資料庫會因為不支援而傳回-1
3、EOF
是否為記錄尾
4、fields
用以擷取記錄集的值,用法,$rs->fields[編號或欄位名],如果$db->SetFetchMode(ADODB_FETCH_ASSOC); 則可以用欄位名直接存取。
5、MoveNext()
記錄指標下移一個。
6、MoveFirst
記錄指標移動在開頭。
7、FetchNextObject()
得到一個行對象,且指標自動下移。如:
$row = $rs->FetchNextObject();
echo($row->UserName . $row->Age );
8、Insert_ID
得到記錄集最後一次插入的值。
9、MetaTypes
得到欄位的類型。如:
$fld = $recordSet->FetchField(1);
$type = $recordSet->MetaType($fld->type);
if ( $type == ‘D‘ || $type == ‘T‘) {.....};
可能的值與意義:
C: character 欄位,應該使用 <input type="text"> 標記來取值。
X: 文字欄位(Text) , 長文字欄位,使用 <textarea> 標記來顯示資料。
B: Blob 欄位或者大型的二位元物件(像程式,圖檔等)。
D: 日期欄位
T: 時間欄位
L: 邏輯欄位(真假值)或位元欄位
N: 數字欄位,包含自動進位、編號、整數、浮點數、實數等。
R: 序列欄位,包含了序列、自動增進整數,只對被選擇的資料庫作用。
10、FetchField
得到一個欄位對象 如:
$field = $rs->FetchField();
field對象有三個屬性 name 、type 、length 分別的意義為(名稱、類型、長度,長度可能傳回-1)
而 type 可以通過 MetaTypes 轉換成字元格式設定,如:
$fld = $recordSet->FetchField(1);
$type = $recordSet->MetaType($fld->type);
if ( $type == ‘D‘ || $type == ‘T‘) {.....};
ADODB入門教程(基礎文章)