高級(jí)材料
Insert 和 Update
假設(shè)現(xiàn)在你要把下面的數(shù)據(jù)插入到數(shù)據(jù)庫中.
ID = 3
TheDate=mktime(0,0,0,8,31,2001) /* 31st August 2001 */
Note= sugar why don't we call it off
當(dāng)你使用另外一個(gè)數(shù)據(jù)庫的時(shí)候,你的插入操作可能不會(huì)成功。
第一個(gè)問題是每個(gè)數(shù)據(jù)庫都有不同的默認(rèn)日期格式。MySQL默認(rèn)格式是YYYY-MM-DD ,然而其它數(shù)據(jù)庫有不同的默認(rèn)格式。ADODB有一個(gè)DBDate()的函數(shù),它能將日期轉(zhuǎn)換成正確的格式。
接下來的一個(gè)問題是Note字段值里的don't 應(yīng)該作為引文。在MySQL中,使用don't 來解決這個(gè)問題,但在一些其它的數(shù)據(jù)庫中(Sybase, Access, MicrosoftSQL Server)使用don''t 。qstr()解決了這個(gè)問題。
那么我們?cè)趺词褂眠@個(gè)函數(shù)呢? 像下面這樣:
$sql = "INSERT INTO table (id, thedate,note) values (" . $ID . ',' . $db->DBDate($TheDate) .',' . $db->qstr($Note).")";$db->Execute($sql);ADODB 也支持 $connection->Affected_Rows() (返回上次update或delete操作影響的行數(shù)) 和 $recordset->Insert_ID() (返回insert聲明生成的上一個(gè)自增編號(hào))。但要說明的是不是所有的數(shù)據(jù)庫都支持這兩個(gè)函數(shù)。
MetaTypes
你可以找到更多關(guān)于你調(diào)用recordset的方法FetchField($fieldoffset)所選擇的每個(gè)字段(我同時(shí)使用字段和列這兩個(gè)詞)的信息。它將返回一個(gè)有三個(gè)屬性(名稱,類型和最大長度)的對(duì)象。
例如:$recordset = $conn->Execute("select adate from table");
$f0 = $recordset->FetchField(0);那么 $f0->name 的值將被設(shè)為 'adata', $f0->type 的值將被設(shè)為 'date'. 如果max_length 未知,它被設(shè)為-1。
處理不同類型的數(shù)據(jù)庫的一個(gè)問題是每個(gè)數(shù)據(jù)庫常常用不同的名字來調(diào)用相同的類型。例如timestamp 類型在某一個(gè)數(shù)據(jù)庫中叫做datetime 類型,而在另一個(gè)是叫做time類型。 因此 ADODB 有個(gè)專門的 MetaType($type, $max_length) 函數(shù)對(duì)下面的類型進(jìn)行標(biāo)準(zhǔn)化:
C: character 和 varchar 類型
X: text 或者 long character (例如.多于255 字節(jié)寬度).