小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ADODB 入門

 農(nóng)夫子oice 2007-04-30

1. 前言

ADODB 是 Active Data Objects Data Base 的簡稱,它是一種 PHP 存取資料庫的函式元件?,F(xiàn)在 SFS3 系統(tǒng) (校園自由軟體交流網(wǎng)學(xué)務(wù)系統(tǒng)) 計(jì)劃的主持人陳瑩光老師,決定採用此一元件,為了讓更多有心參與該專案的伙伴們能夠順利加入發(fā)展的行列,小弟認(rèn)為有必要把 ADODB 的中文入門介紹寫出來,以方便伙伴們參考備查。

雖然 PHP 是建構(gòu) Web 系統(tǒng)強(qiáng)有力的工具,但是 PHP 存取資料庫的功能,一直未能標(biāo)準(zhǔn)化,每一種資料庫,都使用另一種不同且不相容的應(yīng)用程式介面(API)。為了填補(bǔ)這個(gè)缺憾,因此才有 ADODB 的出現(xiàn)。一旦存取資料庫的介面予以標(biāo)準(zhǔn)化,就能隱藏各種資料庫的差異,若欲轉(zhuǎn)換至其它不同的資料庫,將變得十分容易。

目前 ADODB 支援的資料庫種類非常地多,例如:MySQL, PostgreSQL, Interbase, Informix, Oracle, MS SQL 7, Foxpro, Access, ADO, Sybase, DB2 以及一般的 ODBC (其中 PostgreSQL、Informix、Sybase 的driver 是由自由軟體社群發(fā)展之後貢獻(xiàn)出來的)。

使用 ADODB 最大的優(yōu)點(diǎn)之一是:不管後端資料庫如何,存取資料庫的方式都是一致的,開發(fā)設(shè)計(jì)人員不必為了某一套資料庫,而必須再學(xué)習(xí)另一套不同的存取方法,這大大減輕開發(fā)人員的知識(shí)負(fù)擔(dān),過去的知識(shí)往後仍可繼續(xù)使用,轉(zhuǎn)移資料庫平臺(tái)時(shí),程式碼也不必做太大的更動(dòng)。

其實(shí) ADODB 這樣的發(fā)展理念,並不是首創(chuàng)的,DBI 比 ADODB 出現(xiàn)得更早,它提供 Perl 存取資料庫時(shí),使用一致的 API 呼叫介面。相信用過 Perl + DBI 的朋友,再來用 ADODB 時(shí),會(huì)有一種似曾相識(shí)的感覺。

另外,ADODB 對用過 ASP 的人而言,應(yīng)該不陌生,這類朋友對 ADODB 應(yīng)該很容易接受。

我們來看一下,ADODB 的簡單用法:

<?php
            // 引入 adodb 的 inc 檔,才能呼叫 adodb 提供的函式
            include(‘a(chǎn)dodb/adodb.inc.php‘);
            // 選擇連接的資料庫種類,以建立連線物件,
            // 一旦物件建立,即可使用其成員函式來處理資料庫。
            // 以下 $conn 即此一物件(object)
            $conn = &ADONewConnection(‘mysql‘);
            // 要不要顯示偵錯(cuò)訊息,false 不要,true 要。
            // $conn->debug = false;
            $conn->debug = true;
            // 連接資料庫
            // 用法:$conn->Connect(‘主機(jī)‘, ‘使用者‘, ‘密碼‘, ‘資料庫‘);
            // 用例:
            $conn->Connect(‘localhost‘, ‘piza‘, ‘ooo123‘, ‘test‘);
            // 若欲採用持續(xù)性連接,上式可換用 PConnect:
            // $conn->PConnect(‘localhost‘, ‘piza‘, ‘ooo123‘, ‘test‘);
            // 設(shè)定 sql 命令
            $sql = "insert into t values (‘a(chǎn)bcde‘, 18)";
            // 執(zhí)行 sql 命令
            $rs = $conn->Execute($sql);
            // 檢查執(zhí)行結(jié)果,若 $rs == false,則呼叫 $conn 物件的成員函式 ErrorMsg()
            if (!$rs) print $conn->ErrorMsg(); else print "OK!";
            ?>

結(jié)果如下:

---------------------------------------------
            (mysql): insert into t values ("abcde",18)
            ---------------------------------------------
            OK!

若把偵錯(cuò)關(guān)掉,即 $conn->debug=false,則結(jié)果如下:

OK!

以下,逐步為各位介紹:使用 ADODB 的重點(diǎn)方法。
 

2. 安裝

ADODB 的首頁在:http://php./ADOdb,目前(2002/10/24)最新版是:2.42 版,可至 ADODB 下載或至臺(tái)南縣教網(wǎng)中心 FTP 下載。

安裝 ADODB 的方法超極簡單,只要下載、解壓、放入適當(dāng)位置,即可完成 ! 如下所示:

1. 下載:
            $ ncftp ftp.
            cd sysop/ADODB
            get adodb242.tgz
            2. 解壓:
            假設(shè)我把 adodb242.tgz 放入 /var/www/html 中
            $ cp adodb242.tgz /var/www/html
            $ tar xvzf adodb242.tgz
            如下所示:
            adodb/adodb-cryptsession.php
            adodb/adodb-csvlib.inc.php
            adodb/adodb-errorhandler.inc.php
            adodb/adodb-errorpear.inc.php
            adodb/adodb-lib.inc.php
            adodb/adodb-pager.inc.php
            ....以下省略....

現(xiàn)在,您在 /var/www/html/adodb 已安裝好 ADODB 了。


3. 引入 ADODB

一旦安裝好 ADODB,使用前,應(yīng)把 ADODB 相關(guān)的含入檔引入您的程式中。adodb 目錄放在任何位置無所謂,只要能指向正確路徑檔名即可。一般而言,您的程式碼只須引入 adodb.inc.php。

作法如下:

在您的 PHP 程式中:
            include(‘路徑/adodb/adodb.inc.php‘);
            或
            include_once(‘路徑/adodb/adodb.inc.php‘);

例:

若您的程式和 adodb 在同一目錄下:
            .
            ..
            adodb/
            something.php*
            則:
            include(‘a(chǎn)dodb/adodb.inc.php‘);
            即可。
            若位置是在某一個(gè)目錄 somedir 中:
            .
            ..
            adodb
            somedir/something.php
            則必須使用:
            include(‘../adodb/adodb.inc.php‘);

除了 adodb.inc.php 這個(gè)含入檔,ADODB 還提供許多 adodb-*.inc.php 的含入檔,這些多半是為驅(qū)動(dòng)某些資料庫的特殊用法而設(shè)的。

若是引入 adodb-session.php 則可讓您將 session 存入資料庫中來維護(hù)運(yùn)用。

若是引入 adodb-pager.inc.php,可方便您做分頁顯示。

若是引入 adodb-errorhandler.inc.php,可讓您自訂錯(cuò)誤處理訊息。

若是含入 adodb-pear.inc.php,可讓您使用 PHP4 的 PEAR DB 語法來使用 ADODB。此時(shí),尚可使用 DSN 連接資料庫的字串設(shè)定。如 $dsn="mysql://piza:ooo123@localhost/test";

若是引入 tohtml.inc.php,可幫您在程式碼中,方便將取出的記錄,轉(zhuǎn)成 HTML 的表格(table)來顯示。

若是引入 toexport.inc.php,可讓您方便地輸出 CSV 檔或以 tab 分隔欄位的資料檔。

若是引入 rsfilter.inc.php,可讓您在使用記錄之前,預(yù)做過濾處理。

若是引入 pivottable.inc.php,可讓您使用 pivot table 功能(俗稱 cross-tabulations)。

注意 ! adodb.inc.php 是一定要引入的,其它,則視您要使用那一個(gè)功能,再引入該含入檔即可。


8. 插入記錄(Insert)

Insert 的用法如下:

// $name 為字串,$year 為數(shù)字
            $name=‘a(chǎn)bcde‘;
            $year=18;
            // 插入一筆記錄,命令的大小寫無妨,但資料表 t 及變數(shù)則大小寫有分別 !
            $sql = "INSERT INTO t VALUES (‘$name‘, $year)";
            // $sql = "insert into t values (‘$name‘, $year)"; 亦可。
            // 執(zhí)行
            $rs = $conn->Execute($sql);
            // 檢查執(zhí)行結(jié)果,進(jìn)行錯(cuò)誤處理;若正常,則繼續(xù)其它動(dòng)作....
            if (!$rs) print $conn->ErrorMsg();
            ....以下省略....

ErrorMsg() 是錯(cuò)誤顯示的函式,它會(huì)取出錯(cuò)誤訊息,並顯示出來。

另外,ADODB 提供一種 記錄集(RecordSet) 函式 GetInsertSQL(),可幫您產(chǎn)生 Insert 的語法。

例子如下:

<?php
            // 引入 ADODB
            include(‘a(chǎn)dodb/adodb.inc.php‘);
            // 建立連線物件
            $conn = &ADONewConnection(‘mysql‘);
            // 偵錯(cuò)
            $conn->debug=true;
            // DSN 四項(xiàng)基本資料設(shè)定
            $mch="localhost";
            $user="root";
            $pwd="jack168";
            $database="test";
            // 連接至資料庫 test
            $conn->PConnect($mch, $user, $pwd, $database);
            // 產(chǎn)生一筆空記錄
            $sql = "select * from t where year=-1";
            $rs = $conn->Execute($sql);
            // 用一個(gè)空陣列來裝要更新的資料
            $r = array();
            $r[‘name‘]=‘john‘;
            $r[‘year‘]=28;
            // 用 GetInsertSQL 函式來製作一個(gè)完整的 sql 命令,此 sql 命令放在 $insertSQL 中
            $insertSQL = $conn->GetInsertSQL($rs, $r);
            // 執(zhí)行插入
            $conn->Execute($insertSQL);
            $conn->Close();
            ?>

偵錯(cuò)訊息如下:

-----------------------------------------------------------
            (mysql): select * from t where year=-1
            -----------------------------------------------------------
            (mysql): INSERT INTO t ( name, year ) VALUES ( ‘john‘, 28 )
            -----------------------------------------------------------   

9. 取出記錄(Select)

Select 的用法如下:

<?php
            // 引入 ADODB
            include(‘a(chǎn)dodb/adodb.inc.php‘);
            // 建立連線物件
            $conn = &ADONewConnection(‘mysql‘);
            // 不偵錯(cuò)
            $conn->debug=false;
            // DSN 四項(xiàng)基本資料設(shè)定
            $mch="localhost";
            $user="piza";
            $pwd="ooo123";
            $database="test";
            // 連接至資料庫 test
            $conn->PConnect($mch, $user, $pwd, $database);
            // 執(zhí)行 Select 由表格 t 取出資料,
            // 它會(huì)傳回一個(gè) ADORecordSet 記錄集物件 $rs (RecordSet)
            // 實(shí)際上 $rs 是一個(gè) cursor 指標(biāo),它擁有目前的記錄(row 或稱 record),
            // 該記錄的所有欄位資料的內(nèi)容,存放在 fields 這個(gè)陣列之中
            // ,以數(shù)字為索引,第一個(gè)由 0 開始
            $rs = &$conn->Execute(‘select * from t‘);
            // 若 $rs 為 false,則秀出錯(cuò)誤訊息
            if (!$rs) {
            print $conn->ErrorMsg();
            } else {
            // 當(dāng)尚未到達(dá) 記錄集 $rs 的結(jié)束位置(EOF:End Of File)時(shí),(即:還有記錄尚未取出時(shí))
            while (!$rs->EOF) {
            // 秀出所有欄位,$FieldCount() 會(huì)傳回欄位總數(shù)
            for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) {
            print $rs->fields[$i] . " ";
            }
            // 移至下一筆記錄
            $rs->MoveNext();
            // 換列
            echo "<br>\n";
            }
            }
            $rs->Close(); // 可不用
            $conn->Close(); // 可不用
            ?>

$rs->fields[] 陣列是由 PHP 的資料庫擴(kuò)展功能產(chǎn)生的,某些擴(kuò)展功能並不支援使用欄位名稱當(dāng)作索引。

若欲使用名稱當(dāng)作索引,也就是俗稱的 hash 或 associative arrays,則需使用全域變數(shù) $ADODB_FETCH_MODE 加以指定。

以下設(shè)定:使用數(shù)字索引

$ADODB_FETCH_MODE= ADODB_FETCH_NUM;

以下設(shè)定:使用名稱索引

$ADODB_FETCH_MODE= ADODB_FETCH_ASSOC;

下面是使用名稱索引的例子:

<?php
            // 引入 ADODB
            include(‘a(chǎn)dodb/adodb.inc.php‘);
            // 建立連線物件
            $conn = &ADONewConnection(‘mysql‘);
            // 不偵錯(cuò)
            $conn->debug=false;
            // DSN 四項(xiàng)基本資料設(shè)定
            $mch="localhost";
            $user="root";
            $pwd="jack168";
            $database="test";
            // 連接至資料庫 test
            $conn->PConnect($mch, $user, $pwd, $database);
            // 執(zhí)行 sql 之前,指定使用名稱索引
            $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
            // 執(zhí)行 Select,它會(huì)傳回一個(gè) ADORecordSet 記錄集物件 $rs
            // 實(shí)際上 $rs 是一個(gè) cursor 指標(biāo),它擁有目前的記錄內(nèi)容,
            // 該記錄存放在 fields 這個(gè)陣列之中
            $rs = &$conn->Execute(‘select * from t‘);
            // 若 $rs 為 false,則秀出錯(cuò)誤訊息
            if (!$rs) {
            print $conn->ErrorMsg();
            } else {
            // 當(dāng)尚未到達(dá)記錄集結(jié)束位置(EOF)時(shí),
            while (!$rs->EOF) {
            // 秀出所有欄位
            print $rs->fields[‘name‘] . " " . $rs->fields[‘year‘];
            // 移至下一筆記錄
            $rs->MoveNext();
            // 換列
            echo "<br>\n";
            }
            }
            $rs->Close();  // 可不用
            $conn->Close(); // 可不用
            ?>

15. 輸出 CSV 檔

ADODB 提供輸出 CSV 檔的方法,使用前,要將 toexport.inc.php 引入。

<?php
            include(‘a(chǎn)dodb/adodb.inc.php‘);
            // 引入輸出 CSV 檔功能
            include(‘a(chǎn)dodb/toexport.inc.php‘);
            $db = ADONewConnection(‘mysql‘);
            $mch="localhost";
            $user="piza";
            $pwd="ooo123";
            $database="test";
            $db->Connect($mch, $user, $pwd, $database);
            $sql = "select name as ‘姓名‘, year as ‘年紀(jì)‘ from t";
            $rs = $db->Execute($sql);
            // 秀出 CSV 格式
            print rs2csv($rs);
            ?>

結(jié)果如下:

姓名,年紀(jì)
            abcde,45
            yyy,20
            ppp,34
            mmm,13
            hhh,41
            rrr,65
            kkk,29
            miso,154
            sss,89
            abc,18
            abcde,0
            uyt,58
            john,28

也可用 tab 分隔欄位,使用 rs2tab 方法如下:

print rs2tab($rs, false);
            註: false 表示不顯示欄位名稱
            結(jié)果如下:
            abcde	45
            yyy	20
            ppp	34
            mmm	13
            hhh	41
            rrr	65
            kkk	29
            miso	154
            sss	89
            abc	18
            abcde	0
            uyt	58
            john	28
            若是 print rs2tab($rs, true);
            結(jié)果如下:
            姓名	年紀(jì)
            abcde	45
            yyy	20
            ppp	34
            mmm	13
            hhh	41
            rrr	65
            kkk	29
            miso	154
            sss	89
            abc	18
            abcde	0
            uyt	58
            john	28

也可以將結(jié)果由標(biāo)準(zhǔn)輸出(STDOUT)顯示,使用 rs2tabout 方法如下:

print rs2tabout($rs);

執(zhí)行結(jié)果如下:

 

也可以存成 CSV 檔:

// 檔案路徑
            $path = "/tmp/test.csv";
            // 開檔供寫入
            $fhd = fopen($path, "w");
            // 若開檔成功
            if ($fhd) {
            // 則寫入 CSV
            rs2csvfile($rs, $fhd);
            // 也可以使用 rs2tabfile($rs, $fhd);
            // 關(guān)檔
            fclose($fhd);
            }
            結(jié)果如下:
            [ols3@p web]$ cat /tmp/test.csv
            姓名,年紀(jì)
            abcde,45
            yyy,20
            ppp,34
            mmm,13
            hhh,41
            rrr,65
            kkk,29
            miso,154
            sss,89
            abc,18
            abcde,0
            uyt,58
            john,28

 
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多