版權聲明:本文為部落客原創或整理自網絡,歡迎轉載,轉載請注明出處。
任務:連結到 access 的 northwind dsn,然後在每一列顯示頭2個字段。(northwind 北風資料庫,在odbc設定的dsn,是access的标準範例資料庫)
$recordset->fields[]數組是由php資料庫擴充函數庫所産生的。有一些資料庫擴充函數庫僅支援以編号來進行索引,而不支援以字段名為索引。要強迫使用字段名索引,也就是要使用關連式數組,請使用 $adodb_fetch_mode 全域變量來設定。當一個資料集被execute()或是selectlimit()函數建立時,都會儲存而且使用儲如此類的設定模式。
上面的範例說明,如果要以順序來存取字段,就将 $adodb_fetch_mode 的值設為 adodb_fetch_num,要以關連式數組(以字段名)存取字段,就要将值設為 adodb_fetch_assoc。
任務:選取一個資料表,顯示最前面的二欄。如果第二欄是一個日期或時間型态字段,将它格式化成us格式。
· name: 字段名
· type: 字段的資料原生型别native field type of column
· max_length: 字段的最大長度,部份資料庫像mysql,并不回傳字段的正确值,以這個例子而言,就會回傳 -1 。
· c: character 字段,應該使用 <input type="text"> 标記來取值。
· x: 文字字段(text) , 長文字字段,使用 <textarea> 标記來顯示資料。
· b: blob 字段或者大型的二位對象(像程式,圖檔案等)。
· d: 日期字段
· t: 時間字段
· l: 邏輯字段(真假值)或位字段
· n: 數字字段,包含自動進位、編号、整數、浮點數、實數等。
· r: 序列字段,包含了序列、自動增進整數,隻對被選擇的資料庫作用。
新增一筆記錄到訂單資料表,裡面包含了日期和字元串,為了能被資料庫正常存取,字元串必需校正,以避免部份标記字元。例如:有單引号的字元串,john's。
附記:php_track_errors旗标可以被激活,以便将錯誤訊息儲存起來。
連結到mysql資料庫 agora ,并且從sql指令中建立一個 <select> 選單,<option>的标題是第一個字段,回傳值是第二個字段。
在 1.50 版以後的 adodb 裡,是使用公共變量 $adodb_fetch_mode 來設定回傳的數組是以編号或是關連式字元串做索引。
adodb 1.31版起,新增了兩個資料集函數:getupdatesql()及getinsertsql()。這允許你在執行了像"select * from table query where..."這樣的查詢函數後,建立一個 $rs->fields複本,改變這些字段,然後自動産生出更新或是新增的sql指令。
以下我們展示如何運用這些函數,我們将存取一個資料表,帶有下列字段:(id,firstname,lastname,created)。在這些函數被執行前,你需要藉由一個對資料表的查詢指令(select)來初始化一個資料集。
<?
#==============================================
# getupdatesql() 及 getinsertsql() 範例碼
include('adodb.inc.php');
include('tohtml.inc.php');
#==========================
# 以下的程式代碼測試新增狀态
$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();
?>
我們使用http取得 $next_page 變量,以追蹤要跳去那一頁并且儲存目前頁碼在 session 變量 $curr_page 裡。
我們呼叫連結對象的 pageexecute()函收去取得我們要的資料集,然後我們使用資料集的 atfirstpage() 及 atlastpage() 函數去決定是否顯示下一頁和上一頁按鈕。
以上的程式代碼可以在 testpaging.php 範例裡找到。
在之前的版本,你可以使用像 $con->debug=true ; 這樣的設定來進行除錯。但在 1.50 版後,我們提供了另一種方法來處理錯誤狀态。我們讓工程師可以使用 adodb 的自訂錯誤處理程式功能。
adodb 提供了兩種自訂處理方式,你可以配合你的的需要而修訂。第一個方法放在 adodb-errorhandler.inc.php 檔案裡。這讓你可以使用标準的 php 函數 err_reporting 去控制要顯示怎樣的錯誤訊息及 trigger_error 去呼叫 php 預設的錯誤處理程式。
引入了上述檔案後(adodb-errorhandler.inc.php),當發生了下列的錯誤後,将會使得 trigger_error($errorstring,e_user_error)被呼叫。
1. connect() 或 pconnect() 執行失敗時。
2. 執行 sql 指令的函數失敗時,如 execute() 或 selectlimin() 。
3. genid() 進入了無限循環時。
這裡的 $errorstring 變量是由 adodb 所産生的。而且會包含了有用的除錯訊息,類似于随後會建立的 error.log 資料。是以,為了要能正确提供除錯訊息,你要在建立 adoconnection 對象前,就把 adodb-errorhandler.inc.php 引入到程式代碼中。
if you define error_reporting(0), no errors will be shown. if you set error_reporting(e_all), all errors will be displayed on the screen.
如果你設定了 error_reporting(0) 的話,将不會有任何錯誤被顯示。如果你設定了 error_reporting(e_all),那将會顯示所有的錯誤訊息。
以下是一個簡單的範例:
如果你要把錯誤訊息記錄下來,你可以定義兩個選擇性常數 adodb_error_log_type, adodb_error_log_dest。有關于 adodb_error_log_type 的值,你可以去參考 php 使用手冊中有關于 error_log 的說明。在以下的範例中,我使将它設為 3,意思是指将訊息記錄到常數 adodb_error_log_dest 所設定的檔案中。
以下則是寫在 error.log 檔案的錯誤訊息:
第二種錯誤處理方法是 adodb-errorpear.inc.php 。使用這種方式,在錯誤發生時會産生 pear_error 衍生對象,而最後産生的 pear_error 對象可以被 adodb_pear_errir() 函數取回。
在引入 adodb-errorpear.inc.php 檔之前,藉由定義 adodb_pear_error_class 常數,你可以使用一個 pear_error 衍生類别。為了友善除錯,你可以在 php 程式代碼的最前面定義預設的錯誤理方式為 pear_error_die,這将會使得程式一出錯,馬上就輸出錯誤訊息,并且停止執行。
注意,當錯誤産生時,adodb并沒有明确的回傳一個 pear_error 對象給你。你必需要去呼叫 adodb_pear_error() 函數去取回最後的錯誤内容。或者,你可以使用 pear_error_die 這個技巧。
現在,adodb使用 cacheexecute(),cachepageexecute()及cacheselectlimit()函數來支援資料集快取。用法類似于沒有快取的函數,除了要加上一個新的參數 $secs2cache。
以下是一個範例 :
第一個參數是設定查詢的快取秒數。随後呼叫的查詢将會使用存放在由 $adodb_cache_dir 變量指定的快取資料。要強迫查訊執行,并且更新快取記錄,使用 cacheexecute() 函數,并且将第一個參數設為 0 。或者,使用 cacheflush($sql) 也行。
基于安全的考量,如果你要使用 $adodb_cache_dir,我們建議你将在 php.ini 裡的 register_globals 設成 off。
在 adodb 1.80版以後,在 cacheselectlimit() 及 cacheexecute() 中,參數 secs2cache 是選擇性的。如果你不填上去,系統将會使用 $connection->cachesecs 屬性的值,它的預設值是 60 分鐘。