日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ADODB用法详解

發(fā)布時(shí)間:2023/12/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ADODB用法详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.GetAll方法

我們可以使用GetAll方法代替Execute()方法,該方法返回的結(jié)果為一個(gè)二維關(guān)聯(lián)數(shù)據(jù),這樣可以使用foreach或for循環(huán)語(yǔ)句處理,非常方便。另外,GetAll取得的數(shù)組與Smarty模板的foreach配合得非常好。

我們一起看下面的腳本例子:

<?php
include_once("libs/adodb/adodb.inc.php");
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", "root", "root", "library") or die("Unable to connect");
// 構(gòu)造并執(zhí)行一個(gè)查詢(xún)
$query = "SELECT * FROM library";
$result = $db->GetAll($query) or die("Error in query: $query. " . $db->ErrorMsg());
// 清除無(wú)用的對(duì)象
$db->Close();
// 可以使用print_r打印該數(shù)組的內(nèi)容
// print_r($result); exit(0);
// 遍歷記錄集,顯示列的內(nèi)容:TITLE 和AUTHOR
foreach ($result as $row){
?? echo $row[1] . " - " . $row[2] . "\n";
}
// 取得和顯示返回的記錄行數(shù)
echo "\n[" . sizeof($result) . " 行記錄被返回]\n";
?>

GetAll()方法取得記錄集后,產(chǎn)生一個(gè)二維數(shù)組,類(lèi)似于下面的樣子:

Array

(

[0] => Array

(

[0] => 14

[id] => 14

[1] => Mystic River

[title] => Mystic River

[2] => Dennis Lehane

[author] => Dennis Lehane

)

[1] => Array

(

[0] => 15

[id] => 15

[1] => For Kicks

[title] => For Kicks

[2] => Dick Francis

[author] => Dick Francis

)

?? //下略

)

我們?cè)跀?shù)組一章,提到過(guò)這類(lèi)混合數(shù)組最適合用foreach來(lái)處理。這種方法是對(duì)Execute()方法的補(bǔ)充或替代,尤其適合在遍歷查詢(xún)整個(gè)表時(shí)使用。

另外,ADODB還提供取得一條記錄的方法:GetOne()。

2.GetOne()方法

ADODB有個(gè)比較直接的方法可以比較方便地檢測(cè)某條記錄是否存在,那就是它的GetOne($sql)方法。

該方法返回查詢(xún)記錄的第1條第1個(gè)字段名的值,如果執(zhí)行過(guò)程中出現(xiàn)錯(cuò)誤,則返回布爾值false。

我們可以檢測(cè)這個(gè)值是否存在:

<?php

Include_once("libs/adodb/adodb.inc.php");
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", “root”, “passwd”, “adodb”) or die("Unable to connect!");

$rs = $db->GetOne("SELECT * FROM library WHERE id='$id'");

if($rs){

echo '記錄存在';

}else {

?? echo '記錄不存在';

}

?>

不過(guò)這樣有一個(gè)問(wèn)題是,如果數(shù)據(jù)表中id=$id的記錄有多條,不僅僅要知道是否存在有這樣一條記錄,還要把這條記錄提取出來(lái),則可以使用ADODB的GetRow()方法。

3.GetRow()方法

<?php
Include_once("libs/adodb/adodb.inc.php");
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", “root”, “passwd”, “adodb”) or die("Unable to connect!");

$rs = $db->GetRow("SELECT * FROM library WHERE id='$id'");

if(is_array($rs)){

?? echo '記錄存在';

?? print_r($rs);

} else {

?? echo '記錄不存在';

}

?>

需要注意的是,GetOne($sql) 和 GetRow($sql) 都能得到一條特定的記錄,或者得到該記錄不存在的信息,但是如果符合查詢(xún)條件的記錄存在多條時(shí),則這兩個(gè)方法只傳回第一條記錄,其他的都自動(dòng)拋棄。

如果只要得到查詢(xún)結(jié)果的行數(shù),則可以使用結(jié)果集方法中的RecordCount()方法。

4.取得返回的記錄行數(shù)

ADODB還提供了一批實(shí)用功能,如在進(jìn)行查詢(xún)時(shí),提供了非常有用的RecordCount() 和FieldCount()方法,分別返回記錄的數(shù)量和字段的數(shù)量,以下是應(yīng)用這兩個(gè)方法的例子。

<?php
include("libs/adodb/adodb.inc.php");
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", “root”, “passwd”, “adodb”) or die("Unable to connect!");
// 構(gòu)造并執(zhí)行一個(gè)查詢(xún)
$query = "SELECT * FROM library";
$result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg());
// 取得和顯示返回的記錄行數(shù)
echo $result->RecordCount() . " 行記錄被返回\n";
// 取得和顯示返回的字段個(gè)數(shù)
echo $result->FieldCount() . " 個(gè)字段被返回\n";
// clea up
$db->Close();
?>

我們可以使用FetchField()方法取得字段的信息,其中含有該字段的詳細(xì)資料,包括名稱(chēng)和類(lèi)型等,請(qǐng)看如下的腳本例子。

<?php
include("libs/adodb/adodb.inc.php");
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");?
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", "root", "passwd", "adodb") or die("Unable to connect!");
// 構(gòu)造并執(zhí)行一個(gè)查詢(xún)
$query = "SELECT * FROM library";
$result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg());
// 取得記錄集中字段的結(jié)構(gòu)信息
for($x=0; $x<$result->FieldCount(); $x++){
?? print_r($result->FetchField($x));
}
// 清理無(wú)用的對(duì)象
$db->Close();
?>

下面輸出的是有關(guān)id字段的結(jié)構(gòu)信息。

stdClass myMagicbject

(

[name] => id

[table] => library

[def] =>

[max_length] => 3

[not_null] => 1

[primary_key] => 1

[multiple_key] => 0

[unique_key] => 0

[numeric] => 1

[blob] => 0

[type] => int

[unsigned] => 1

[zerofill] => 0

[binary] =>

)

5.其他相關(guān)方法

當(dāng)執(zhí)行一個(gè)INSERT查詢(xún)時(shí),如果該表的主鍵是一個(gè)自動(dòng)增量的字段,則可以使用ADODB的insert_id()方法,來(lái)獲得最后數(shù)據(jù)插入時(shí)自動(dòng)產(chǎn)生的增量值。

<?php
include_once(“l(fā)ibs/adodb/adodb.inc.php”);
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", “root”, “root”, “adodb”) or die("Unable to connect!");
// 構(gòu)造并執(zhí)行INSERT插入操作
$title = $db->qstr("PHP5與MySQL5 Web開(kāi)發(fā)技術(shù)詳解");
$author = $db->qstr("杜江");
$query = "INSERT INTO library (title, author) VALUES ($title, $author)";
$result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg());
// 顯示插入的記錄號(hào)
if ($result){
?? echo "最后插入的記錄ID: " . $db->Insert_ID();
}
// 清理無(wú)用的對(duì)象
$db->Close();
?>

腳本中的qstr()方法,功能是過(guò)濾SQL查詢(xún)中的非法字符。

執(zhí)行后,即無(wú)論查詢(xún)(SELECT)、刪除(DELETE)或修改(UPDATE)數(shù)據(jù),如果想知道是否對(duì)表有影響,可以使用affected_rows()方法,它可以告訴我們操作后有多少(記錄)行受到了影響。請(qǐng)看下面的腳本例子:

<?php
include_once("libs/adodb/adodb.inc.php");
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", “root”, “root”, “adodb”) or die("Unable to connect!");
// 構(gòu)造并執(zhí)行一個(gè)查詢(xún)
$query = "DELETE FROM library WHERE author = 'J. Luser'";
$result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg());
// 取得和顯示執(zhí)行后影響的記錄行數(shù)
if ($result){
?? echo $db->Affected_Rows() . " 行已被刪除";
}
// 清理無(wú)用的對(duì)象
$db->Close();
?>

6.限制查詢(xún)結(jié)果

上面 我們討論了如何通過(guò)使用一個(gè)數(shù)據(jù)庫(kù)庫(kù)函數(shù)使應(yīng)用程序更簡(jiǎn)潔,更易于移植。比如從MS SQL Server轉(zhuǎn)移到MySQL,在MS SQL Server中使用指令“SELECT TOP 15 name FROM employee”取得數(shù)據(jù)的前15條,可在MySQL中卻不支持這種寫(xiě)法,而要寫(xiě)成:SELECT name FROM employee LIMIT 15。

它似乎對(duì)我們敲響了警鐘,應(yīng)該停止在查詢(xún)語(yǔ)句中使用非標(biāo)準(zhǔn)SQL指令,而去認(rèn)真地學(xué)習(xí)標(biāo)準(zhǔn)的SQL。

幸運(yùn)的是,ADODB有一個(gè)處理 LIMIT的方法:SelectLimit(),這樣我們就根本不用管連接的是MySQL還是MS SQL Server,ADODB會(huì)在底層為我們自動(dòng)轉(zhuǎn)換,請(qǐng)見(jiàn)下面的腳本例子:

<?php
include_once("libs/adodb/adodb.inc.php");
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", "root", "passwd", "adodb") or die("Unable to connect!");
// 構(gòu)造并執(zhí)行一個(gè)查詢(xún)
// 我們要取得5行記錄,從符合記錄的第3行開(kāi)始取
$query = "SELECT * FROM library";
$result = $db->SelectLimit($query, 5, 3) or die("Error in query: $query. " . $db->ErrorMsg());
// 遍歷記錄集
while (!$result->EOF) {
?? echo $result->fields[1] . " - " . $result->fields[2] . "\n";
$result->MoveNext();
}
// 清理無(wú)用的對(duì)象
$db->Close();
?>

在這個(gè)例子中,selectlimit()方法類(lèi)似于MySQL的LIMIT語(yǔ)句,可用于控制從某行開(kāi)始查詢(xún),到某行的結(jié)果,從而取得我們指定的記錄集。

我們可以利用ADODB提供的MetaDatabases()方法取得當(dāng)前服務(wù)器中所有數(shù)據(jù)庫(kù)的清單。還有一個(gè)方法和它很類(lèi)似,即使用MetaTables()方法可以取得當(dāng)前庫(kù)中所有表的清單。請(qǐng)看下面的例子:

<?php
include(“l(fā)ibs/adodb/adodb.inc.php”);
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", "root", "passwd", "adodb") or die("Unable to connect!");
// 取得數(shù)據(jù)列表
echo "數(shù)據(jù)庫(kù):\n";
foreach($db->MetaDatabases() as $d){
?? echo "* $d\n";???
}
// 取得數(shù)據(jù)表清單
echo "\n當(dāng)前數(shù)據(jù)庫(kù)下的表:\n";
foreach($db->MetaTables() as $table){
?? echo "* $table\n";???
}
// 清理無(wú)用的對(duì)象
$db->Close();
?>

7.快速存取

有時(shí),我們需要對(duì)一些不同的值做一些特殊的查詢(xún),比如一系列的INSERT(插入)語(yǔ)句。ADODB類(lèi)提供了兩個(gè)方法,可以使我們既節(jié)約時(shí)間又節(jié)省系統(tǒng)的開(kāi)銷(xiāo),請(qǐng)看如下示例:

<?php
include(“l(fā)ibs/adodb/adodb.inc.php”);
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", "root", "passwd", "adodb") or die("Unable to connect!");
// 構(gòu)造準(zhǔn)備查詢(xún),使用參數(shù)綁定
$query = $db->Prepare("INSERT INTO library (title, author) VALUES (?, ?)");
// 從CSV 中取得要插入的標(biāo)題和作者名稱(chēng)
$data = file("./book_list.csv");
// 遍歷該文件,并執(zhí)行插入操作
foreach ($data as $l){
?? $arr = explode(",", $l);
?? // 插入值并綁定準(zhǔn)備語(yǔ)句
?? $result = $db->Execute($query, array($arr[0], $arr[1])) or die("Error in query: $query. " . $db->ErrorMsg());
}
// 清理無(wú)用的對(duì)象
$db->Close;
?>

prepare()函數(shù),把一個(gè)SQL查詢(xún)作為參數(shù),讀取一個(gè)查詢(xún),但并不立即執(zhí)行。prepare()返回一個(gè)句柄給一個(gè)prepare查詢(xún),當(dāng)保存和傳遞給Execute()方法后,則立即執(zhí)行該查詢(xún)。

8.處理事務(wù)

處理事務(wù)是許多應(yīng)用程序的一個(gè)重要的特征(比如,錢(qián)從你的賬戶(hù)轉(zhuǎn)出,然后轉(zhuǎn)入到某個(gè)人的賬戶(hù)中。只要其中任意一步操作失敗,這整個(gè)過(guò)程都必須被認(rèn)定為失敗。不然,錢(qián)被劃出,而沒(méi)有進(jìn)對(duì)方的賬戶(hù);或者,錢(qián)沒(méi)有劃出,但對(duì)方賬戶(hù)無(wú)端多了一筆錢(qián))。

處理事務(wù)可以在代碼級(jí)上進(jìn)行機(jī)警地管理控制。常數(shù)錯(cuò)誤檢查被用來(lái)判斷執(zhí)行COMMIT(事務(wù)的所有各項(xiàng)都正確,執(zhí)行正確,結(jié)束事務(wù))還是執(zhí)行ROLLBACK(事務(wù)中有錯(cuò)誤,所有改動(dòng)需要恢復(fù)原來(lái)狀況)。

現(xiàn)在的數(shù)據(jù)庫(kù)系統(tǒng)絕大多數(shù)都支持事務(wù),如MySQL、Oracle、MS SQL Server等,ADODB提供一個(gè)非常好的功能,能夠讓你更透明地使用這一特性。請(qǐng)看下面的例子:

<?php
include(“l(fā)ibs/adodb/adodb.inc.php”);
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)
$db = NewADOConnection("mysql");
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", “root”, “root”, “adodb”) or die("Unable to connect!");
//關(guān)閉auto-commit自動(dòng)提交事務(wù)
// 開(kāi)始事務(wù)處理語(yǔ)句塊
$db->BeginTrans();
// 第一次查詢(xún)
$query = "INSERT INTO library (title, author) VALUES ('測(cè)試用書(shū)', '佚名')";
$result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg());
//使用第一次查詢(xún)返回的ID號(hào)
if ($result){
?? $id = $db->Insert_ID();
?? $query = "INSERT INTO purchase_info (id, price) VALUES ($id, 'RMB 31.9')";
?? $result = $db->Execute($query)

or die("Error in query: $query. " . $db->ErrorMsg());
}
// 如果操作成功
if ($result){
?? // 事務(wù)提交
?? $db->CommitTrans();
}// 否則回滾
else{
?? $db->RollbackTrans();
}
// 清理無(wú)用的對(duì)象
$db->Close;
?>

該腳本首先 需要關(guān)掉數(shù)據(jù)庫(kù)的auto commit功能,通過(guò)begintrans()方法來(lái)處理,這種方法也標(biāo)志著一個(gè)事務(wù)的開(kāi)始??梢允褂肅ommitTrans()或 RollbackTrans()函數(shù)來(lái)處理操作,一旦auto commit已經(jīng)關(guān)掉,你就可以任意執(zhí)行所需要的查詢(xún),確認(rèn)事務(wù)的查詢(xún)執(zhí)行無(wú)誤并完畢后,由我們自己決定何時(shí)執(zhí)行commit操作。

每一 次執(zhí)行Execute()事務(wù)塊后,它會(huì)返回一個(gè)布爾值,告訴我們是否成功地執(zhí)行了查詢(xún)??梢愿櫟竭@個(gè)值,以及使用的時(shí)間,以決定是否要進(jìn)行整個(gè)交易行 為。一旦你相信一切都沒(méi)問(wèn)題,則告訴數(shù)據(jù)庫(kù)committrans()方法;如果發(fā)現(xiàn)有錯(cuò)誤發(fā)生,則可以進(jìn)行回滾操作——執(zhí)行 rollbacktrans()方法。

值得注意的是,注意您的數(shù)據(jù)庫(kù)類(lèi)型是否支持這些事務(wù)函數(shù),前面已經(jīng)說(shuō)過(guò),MySQL的InnoDB類(lèi)型表支持事務(wù),但是MyISAM類(lèi)型并不支持。

9.使用緩存查詢(xún)

在一個(gè)動(dòng)態(tài)頁(yè)面中,如果其中的一個(gè)查詢(xún)指令很少改變且頻繁被執(zhí)行,我們則可以使用ADODB的緩存功能,可以將查詢(xún)指令的結(jié)果緩存成靜態(tài)文件,從而提高PHP腳本的性能。

當(dāng)試圖通過(guò)緩存來(lái)提高你的應(yīng)用程序的性能之前,建議先去優(yōu)化查詢(xún)指令再開(kāi)始本操作,這樣才會(huì)起到事半功倍之效果。

ADODB最棒的功能就是提供查詢(xún)緩存的功能。緩存可以大大改善應(yīng)用程序的性能,尤其是網(wǎng)站系統(tǒng),因?yàn)榇蟛糠钟脩?hù)都是在瀏覽網(wǎng)站,數(shù)據(jù)庫(kù)完成的任務(wù)多半是查詢(xún)(SELECT操作)。為了更好地理解與應(yīng)用緩存查詢(xún)的功能,我們來(lái)看下面的腳本例子。

<?php
include_once("libs/adodb/adodb.inc.php");
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", "root", "root", "adodb") or die("Unable to connect!");
// 構(gòu)造并執(zhí)行一個(gè)查詢(xún)
$query = "SELECT * FROM library";
$result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg());
// 遍歷返回的記錄集,顯示列數(shù)據(jù)的內(nèi)容 TITLE 和 AUTHOR
while (!$result->EOF) {
?? echo $result->fields[1] . " - " . $result->fields[2] . "\n";
?? $result->MoveNext();
}
// 顯示取得的記錄行數(shù)
echo "\n[" . $result->RecordCount() . " 行記錄被返回]\n";
// 關(guān)閉數(shù)據(jù)庫(kù)連接
$db->Close();
?>

這段代碼使用ADODB進(jìn)行一個(gè)SELECT操作。比如說(shuō),這就是您的網(wǎng)站,平均有每分鐘5000次的點(diǎn)擊(PV,Page View)量,那么數(shù)據(jù)庫(kù)系統(tǒng)每小時(shí)至少要被查詢(xún)3萬(wàn)次以上,可以想象,這對(duì)我們的MySQL數(shù)據(jù)庫(kù)的負(fù)載是相當(dāng)繁重的。

因此ADODB提供了緩存的功能,可以將經(jīng)常查詢(xún)的結(jié)果保存起來(lái),進(jìn)而降低數(shù)據(jù)庫(kù)服務(wù)器的負(fù)荷,同時(shí)也向用戶(hù)提供更快速的內(nèi)容響應(yīng)。

下面是修改上面的腳本,改為使用CacheExecute來(lái)進(jìn)行緩存查詢(xún)的示例:

<?php
include("libs/adodb/adodb.inc.php");

//設(shè)置緩存保存的路徑,.表示當(dāng)前目錄
$ADODB_CACHE_DIR = '.'; //為了管理方便,實(shí)際開(kāi)發(fā)環(huán)境請(qǐng)指向到獨(dú)立的目錄中,如/tmp/adodb
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");

// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", "root", "passwd", "adodb") or die("Unable to connect!");

// 構(gòu)造并執(zhí)行一個(gè)查詢(xún)
$query = "SELECT * FROM library";
$result = $db->CacheExecute(300,$query) or die("Error in query: $query. " . $db->ErrorMsg());

// 遍歷返回的記錄集,顯示列數(shù)據(jù)的內(nèi)容 TITLE 和 AUTHOR
while (!$result->EOF) {
?? echo $result->fields[1] . " - " . $result->fields[2] . "\n";
?? $result->MoveNext();
}

// 取得和顯示返回的記錄行數(shù)
echo "\n[" . $result->RecordCount() . " 行記錄被返回]\n";

// 關(guān)閉數(shù)據(jù)庫(kù)連接
$db->Close();
?>

CacheExecute()方法的第一個(gè)參數(shù)是緩存文件(緩存文件被命名為adodb_*.cache)將被保留的時(shí)間,以秒計(jì)時(shí);第二個(gè)參數(shù)是SQL聲明。第一個(gè)參數(shù)是可選擇的,若沒(méi)有限定時(shí)間,默認(rèn)值是3600秒,也就是1個(gè)小時(shí)。

值得一提的是,使用CacheExcute()方法時(shí),需要將php.ini中的參數(shù)magic_quotes_runtime設(shè)為0。

也可以根據(jù)需要,在程序運(yùn)行時(shí)動(dòng)態(tài)修改它的值:

set_magic_quotes_runtime(0);

注意:將上述代碼放到調(diào)用數(shù)據(jù)庫(kù)的指令之前,我們還可以在任何時(shí)候,通過(guò)調(diào)用CacheFlush()來(lái)清除過(guò)時(shí)的緩存。

10.生成下拉列表菜單

ADODB特意為Web開(kāi)發(fā)任務(wù)提供幾個(gè)通用的方法。其中,最有用的是GetMenu()方法,通過(guò)抽取數(shù)據(jù)庫(kù)的記錄集,自動(dòng)地生成表單及菜單列表框。

下面介紹的就是從數(shù)據(jù)庫(kù)動(dòng)態(tài)構(gòu)建下拉菜單(Option)的例子。

<html>
<head></head>
<body>
<?php
include_once("libs/adodb/adodb.inc.php");

// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");

// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", "root", "root", "library") or die("Unable to connect!");

// 構(gòu)造并執(zhí)行一個(gè)查詢(xún)
$query = "SELECT title, id FROM library";
$result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg());

//顯示HTML下拉列表菜單
echo $result->GetMenu("library", '', false);

// 關(guān)閉數(shù)據(jù)庫(kù)連接
$db->Close();
?>
</body>
</html>

GetMenu()方法需要傳入?yún)?shù),用來(lái)控制列表框的行為。上例中第一個(gè)參數(shù)是列表框的名字(這個(gè)例子為“l(fā)ibrary”);第二個(gè)參數(shù)是顯示時(shí)默認(rèn)的值,可以為空,從第一個(gè)記錄開(kāi)始;第三個(gè)參數(shù),指定列表框的項(xiàng)目是否為空;第四個(gè)參數(shù),控制是否允許用戶(hù)多選。

上例的顯示結(jié)果如下:

<select name="library" >

<option value="15">Mystic River</option>

<option value="16">Where Eagles Dare</option>

<option value="17">XML and PHP</option>

</select>

可以看到,該列表菜單內(nèi)容是從library表抽取的記錄,列表框的名字為“l(fā)ibrary”,在記錄集中,ID是菜單選項(xiàng)的值,名稱(chēng)為菜單框顯示的元素。

由此可以看出,GetMenu()方法可以大幅度簡(jiǎn)化Web開(kāi)發(fā)任務(wù),大大減少代碼量。

11.輸出到文件

ADODB還允許我們將記錄輸出為一個(gè)不同形式的文件:如逗號(hào)分隔符CSV文件,制表符表格,甚至于HTML形式的表格。

這些功能屬于ADODB的附屬功能,在使用時(shí)需要包含相關(guān)ADODB類(lèi)文件,下面是樣例的內(nèi)容。

<?php
include("libs/adodb/adodb.inc.php");
// 包含轉(zhuǎn)換方法的文件
include_once("libs/adodb/toexport.inc.php");
// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");
// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", "root", "passwd", "library") or die("Unable to connect!");
// 構(gòu)造并執(zhí)行一個(gè)查詢(xún)
$query = "SELECT title, id FROM library";
$result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg());
// 返回一個(gè)CSV字符串
echo rs2csv($result);
// 關(guān)閉數(shù)據(jù)庫(kù)的連接
$db->Close();
?>

輸出結(jié)果如下:

title,id

Mystic River,15

Where Eagles Dare,16

XML and PHP,17

我們也可以去除結(jié)果中第一行,即字段的名稱(chēng),使用腳本格式如下:

// 返回一個(gè) CSV 字符串

echo rs2csv($result, false);

腳本的輸出結(jié)果將沒(méi)有字段名稱(chēng),如下:

Mystic River,15

Where Eagles Dare,16

XML and PHP,17

ADODB還提供生成制表符或分隔符文件功能,使用rs2tab()方法:

<?php

include("libs/adodb/adodb.inc.php");

// 包含轉(zhuǎn)換方法的文件

include("toexport.inc.php");

//創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象

$db = NewADOConnection("mysql");

// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接

$db->Connect("localhost", "root", "root", "library") or die("Unable to connect!");

// 構(gòu)造并執(zhí)行一個(gè)查詢(xún)

$query = "SELECT title, id FROM library";

$result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg());

// 返回一個(gè)TAB制表符分隔的字符串

echo rs2tab($result);

// 關(guān)閉數(shù)據(jù)庫(kù)連接

$db->Close();

?>

顯示結(jié)果如下:

title?? id

Mystic River?? 15

Where Eagles Dare?? 16

XML and PHP?? 17

ADODB還提供生成HTML表格的功能,使用rs2html()方法:

<html>
<head></head>
<body>
<?php
include_once(“l(fā)ibs/adodb/adodb.inc.php”);

// 包含轉(zhuǎn)換方法的文件
include_once("libs/adodb/tohtml.inc.php");

// 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象
$db = NewADOConnection("mysql");

// 打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接
$db->Connect("localhost", "root", "passwd", "library") or die("Unable to connect!");

// 構(gòu)造并執(zhí)行一個(gè)查詢(xún)
$query = "SELECT title, id FROM library";
$result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg());

// 返回一個(gè)HTML格式的表格
echo rs2html($result);

// 關(guān)閉數(shù)據(jù)庫(kù)連接
$db->Close();
?>
</body>
</html>

總結(jié)

以上是生活随笔為你收集整理的ADODB用法详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。