mysql adodb基本的函數(shù)1.GetAll方法我們可以使用GetAll方法代替Execute()方法,,該方法返回的結(jié)果為一個(gè)二維關(guān)聯(lián)數(shù)據(jù),這樣可以使用foreach或for循環(huán)語句處理,,非常方便,。另外,GetAll取得的數(shù)組與Smarty模板的foreach配合得非常好,。 我們一起看下面的腳本例子: <?php include_once("libs/adodb/adodb.inc.php"); // 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象 $db = NewADOConnection("mysql"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", "root", "root", "library") or die("Unable to connect"); // 構(gòu)造并執(zhí)行一個(gè)查詢 $query = "SELECT * FROM library"; $result = $db->GetAll($query) or die("Error in query: $query. " . $db->ErrorMsg()); // 清除無用的對(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ù)組,,類似于下面的樣子: 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ù)組一章,,提到過這類混合數(shù)組最適合用foreach來處理。這種方法是對(duì)Execute()方法的補(bǔ)充或替代,,尤其適合在遍歷查詢整個(gè)表時(shí)使用,。 另外,ADODB還提供取得一條記錄的方法:GetOne(),。 2.GetOne()方法ADODB有個(gè)比較直接的方法可以比較方便地檢測(cè)某條記錄是否存在,,那就是它的GetOne($sql)方法。 該方法返回查詢記錄的第1條第1個(gè)字段名的值,,如果執(zhí)行過程中出現(xiàn)錯(cuò)誤,,則返回布爾值false。 我們可以檢測(cè)這個(gè)值是否存在: <?php Include_once("libs/adodb/adodb.inc.php"); // 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象 $db = NewADOConnection("mysql"); // 打開一個(gè)數(shù)據(jù)庫連接 $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 '記錄不存在'; } ?> 不過這樣有一個(gè)問題是,,如果數(shù)據(jù)表中id=$id的記錄有多條,,不僅僅要知道是否存在有這樣一條記錄,還要把這條記錄提取出來,,則可以使用ADODB的GetRow()方法,。 3.GetRow()方法<?php Include_once("libs/adodb/adodb.inc.php"); // 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象 $db = NewADOConnection("mysql"); // 打開一個(gè)數(shù)據(jù)庫連接 $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) 都能得到一條特定的記錄,,或者得到該記錄不存在的信息,,但是如果符合查詢條件的記錄存在多條時(shí),則這兩個(gè)方法只傳回第一條記錄,,其他的都自動(dòng)拋棄,。 如果只要得到查詢結(jié)果的行數(shù),則可以使用結(jié)果集方法中的RecordCount()方法。 4.取得返回的記錄行數(shù)ADODB還提供了一批實(shí)用功能,,如在進(jì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"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", “root”, “passwd”, “adodb”) or die("Unable to connect!"); // 構(gòu)造并執(zhí)行一個(gè)查詢 $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ì)資料,,包括名稱和類型等,,請(qǐng)看如下的腳本例子。 <?php include("libs/adodb/adodb.inc.php"); // 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象 $db = NewADOConnection("mysql"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", "root", "passwd", "adodb") or die("Unable to connect!"); // 構(gòu)造并執(zhí)行一個(gè)查詢 $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)); } // 清理無用的對(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查詢時(shí),,如果該表的主鍵是一個(gè)自動(dòng)增量的字段,則可以使用ADODB的insert_id()方法,,來獲得最后數(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"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", “root”, “root”, “adodb”) or die("Unable to connect!"); // 構(gòu)造并執(zhí)行INSERT插入操作 $title = $db->qstr("PHP5與MySQL5 Web開發(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(); } // 清理無用的對(duì)象 $db->Close(); ?> 腳本中的qstr()方法,功能是過濾SQL查詢中的非法字符,。
執(zhí)行后,,即無論查詢(SELECT)、刪除(DELETE)或修改(UPDATE)數(shù)據(jù),,如果想知道是否對(duì)表有影響,,可以使用affected_rows()方法,它可以告訴我們操作后有多少(記錄)行受到了影響,。請(qǐng)看下面的腳本例子: <?phpinclude_once("libs/adodb/adodb.inc.php"); // 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象 $db = NewADOConnection("mysql"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", “root”, “root”, “adodb”) or die("Unable to connect!"); // 構(gòu)造并執(zhí)行一個(gè)查詢 $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() . " 行已被刪除"; } // 清理無用的對(duì)象 $db->Close(); ?> 6.限制查詢結(jié)果上面 我們討論了如何通過使用一個(gè)數(shù)據(jù)庫庫函數(shù)使應(yīng)用程序更簡潔,,更易于移植。比如從MS SQL Server轉(zhuǎn)移到MySQL,,在MS SQL Server中使用指令“SELECT TOP 15 name FROM employee”取得數(shù)據(jù)的前15條,可在MySQL中卻不支持這種寫法,,而要寫成:SELECT name FROM employee LIMIT 15。 它似乎對(duì)我們敲響了警鐘,應(yīng)該停止在查詢語句中使用非標(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)見下面的腳本例子: <?php include_once("libs/adodb/adodb.inc.php"); // 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象 $db = NewADOConnection("mysql"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", "root", "passwd", "adodb") or die("Unable to connect!"); // 構(gòu)造并執(zhí)行一個(gè)查詢 // 我們要取得5行記錄,,從符合記錄的第3行開始取 $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(); } // 清理無用的對(duì)象 $db->Close(); ?> 在這個(gè)例子中,,selectlimit()方法類似于MySQL的LIMIT語句,可用于控制從某行開始查詢,到某行的結(jié)果,,從而取得我們指定的記錄集,。 我們可以利用ADODB提供的MetaDatabases()方法取得當(dāng)前服務(wù)器中所有數(shù)據(jù)庫的清單。還有一個(gè)方法和它很類似,,即使用MetaTables()方法可以取得當(dāng)前庫中所有表的清單,。請(qǐng)看下面的例子: <?php include(“l(fā)ibs/adodb/adodb.inc.php”); // 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象 $db = NewADOConnection("mysql"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", "root", "passwd", "adodb") or die("Unable to connect!"); // 取得數(shù)據(jù)列表 echo "數(shù)據(jù)庫:\n"; foreach($db->MetaDatabases() as $d){ echo "* $d\n"; } // 取得數(shù)據(jù)表清單 echo "\n當(dāng)前數(shù)據(jù)庫下的表:\n"; foreach($db->MetaTables() as $table){ echo "* $table\n"; } // 清理無用的對(duì)象 $db->Close(); ?> 7.快速存取有時(shí),我們需要對(duì)一些不同的值做一些特殊的查詢,,比如一系列的INSERT(插入)語句,。ADODB類提供了兩個(gè)方法,可以使我們既節(jié)約時(shí)間又節(jié)省系統(tǒng)的開銷,,請(qǐng)看如下示例: <?php include(“l(fā)ibs/adodb/adodb.inc.php”); // 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象 $db = NewADOConnection("mysql"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", "root", "passwd", "adodb") or die("Unable to connect!"); // 構(gòu)造準(zhǔn)備查詢,,使用參數(shù)綁定 $query = $db->Prepare("INSERT INTO library (title, author) VALUES (?, ?)"); // 從CSV 中取得要插入的標(biāo)題和作者名稱 $data = file("./book_list.csv"); // 遍歷該文件,并執(zhí)行插入操作 foreach ($data as $l){ $arr = explode(",", $l); // 插入值并綁定準(zhǔn)備語句 $result = $db->Execute($query, array($arr[0], $arr[1])) or die("Error in query: $query. " . $db->ErrorMsg()); } // 清理無用的對(duì)象 $db->Close; ?> prepare()函數(shù),,把一個(gè)SQL查詢作為參數(shù),,讀取一個(gè)查詢,但并不立即執(zhí)行,。prepare()返回一個(gè)句柄給一個(gè)prepare查詢,,當(dāng)保存和傳遞給Execute()方法后,則立即執(zhí)行該查詢,。 8.處理事務(wù)處理事務(wù)是許多應(yīng)用程序的一個(gè)重要的特征(比如,,錢從你的賬戶轉(zhuǎn)出,然后轉(zhuǎn)入到某個(gè)人的賬戶中,。只要其中任意一步操作失敗,,這整個(gè)過程都必須被認(rèn)定為失敗。不然,,錢被劃出,,而沒有進(jìn)對(duì)方的賬戶;或者,,錢沒有劃出,,但對(duì)方賬戶無端多了一筆錢)。 處理事務(wù)可以在代碼級(jí)上進(jìn)行機(jī)警地管理控制,。常數(shù)錯(cuò)誤檢查被用來判斷執(zhí)行COMMIT(事務(wù)的所有各項(xiàng)都正確,,執(zhí)行正確,結(jié)束事務(wù))還是執(zhí)行ROLLBACK(事務(wù)中有錯(cuò)誤,,所有改動(dòng)需要恢復(fù)原來狀況),。 現(xiàn)在的數(shù)據(jù)庫系統(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"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", “root”, “root”, “adodb”) or die("Unable to connect!"); //關(guān)閉auto-commit自動(dòng)提交事務(wù) // 開始事務(wù)處理語句塊 $db->BeginTrans(); // 第一次查詢 $query = "INSERT INTO library (title, author) VALUES ('測(cè)試用書', '佚名')"; $result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg()); //使用第一次查詢返回的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(); } // 清理無用的對(duì)象 $db->Close; ?> 該腳本首先 需要關(guān)掉數(shù)據(jù)庫的auto commit功能,,通過begintrans()方法來處理,這種方法也標(biāo)志著一個(gè)事務(wù)的開始,??梢允褂肅ommitTrans()或 RollbackTrans()函數(shù)來處理操作,一旦auto commit已經(jīng)關(guān)掉,,你就可以任意執(zhí)行所需要的查詢,,確認(rèn)事務(wù)的查詢執(zhí)行無誤并完畢后,由我們自己決定何時(shí)執(zhí)行commit操作,。 每一 次執(zhí)行Execute()事務(wù)塊后,,它會(huì)返回一個(gè)布爾值,告訴我們是否成功地執(zhí)行了查詢,??梢愿櫟竭@個(gè)值,以及使用的時(shí)間,,以決定是否要進(jìn)行整個(gè)交易行 為,。一旦你相信一切都沒問題,則告訴數(shù)據(jù)庫committrans()方法,;如果發(fā)現(xiàn)有錯(cuò)誤發(fā)生,,則可以進(jìn)行回滾操作——執(zhí)行 rollbacktrans()方法。 值得注意的是,,注意您的數(shù)據(jù)庫類型是否支持這些事務(wù)函數(shù),,前面已經(jīng)說過,MySQL的InnoDB類型表支持事務(wù),,但是MyISAM類型并不支持,。 9.使用緩存查詢在一個(gè)動(dòng)態(tài)頁面中,如果其中的一個(gè)查詢指令很少改變且頻繁被執(zhí)行,,我們則可以使用ADODB的緩存功能,,可以將查詢指令的結(jié)果緩存成靜態(tài)文件,從而提高PHP腳本的性能,。 當(dāng)試圖通過緩存來提高你的應(yīng)用程序的性能之前,建議先去優(yōu)化查詢指令再開始本操作,,這樣才會(huì)起到事半功倍之效果,。 ADODB最棒的功能就是提供查詢緩存的功能。緩存可以大大改善應(yīng)用程序的性能,,尤其是網(wǎng)站系統(tǒng),,因?yàn)榇蟛糠钟脩舳际窃跒g覽網(wǎng)站,,數(shù)據(jù)庫完成的任務(wù)多半是查詢(SELECT操作)。為了更好地理解與應(yīng)用緩存查詢的功能,,我們來看下面的腳本例子,。 <?php include_once("libs/adodb/adodb.inc.php"); // 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象 $db = NewADOConnection("mysql"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", "root", "root", "adodb") or die("Unable to connect!"); // 構(gòu)造并執(zhí)行一個(gè)查詢 $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ù)庫連接 $db->Close(); ?> 這段代碼使用ADODB進(jìn)行一個(gè)SELECT操作,。比如說,,這就是您的網(wǎng)站,平均有每分鐘5000次的點(diǎn)擊(PV,,Page View)量,,那么數(shù)據(jù)庫系統(tǒng)每小時(shí)至少要被查詢3萬次以上,可以想象,,這對(duì)我們的MySQL數(shù)據(jù)庫的負(fù)載是相當(dāng)繁重的,。 因此ADODB提供了緩存的功能,可以將經(jīng)常查詢的結(jié)果保存起來,,進(jìn)而降低數(shù)據(jù)庫服務(wù)器的負(fù)荷,,同時(shí)也向用戶提供更快速的內(nèi)容響應(yīng)。 下面是修改上面的腳本,,改為使用CacheExecute來進(jìn)行緩存查詢的示例: <?php include("libs/adodb/adodb.inc.php"); //設(shè)置緩存保存的路徑,,.表示當(dāng)前目錄 $ADODB_CACHE_DIR = '.'; //為了管理方便,實(shí)際開發(fā)環(huán)境請(qǐng)指向到獨(dú)立的目錄中,,如/tmp/adodb // 創(chuàng)建一個(gè)mysql連接實(shí)例對(duì)象 $db = NewADOConnection("mysql"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", "root", "passwd", "adodb") or die("Unable to connect!"); // 構(gòu)造并執(zhí)行一個(gè)查詢 $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ù)庫連接 $db->Close(); ?> CacheExecute()方法的第一個(gè)參數(shù)是緩存文件(緩存文件被命名為adodb_*.cache)將被保留的時(shí)間,以秒計(jì)時(shí),;第二個(gè)參數(shù)是SQL聲明,。第一個(gè)參數(shù)是可選擇的,若沒有限定時(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ù)庫的指令之前,我們還可以在任何時(shí)候,,通過調(diào)用CacheFlush()來清除過時(shí)的緩存,。 10.生成下拉列表菜單ADODB特意為Web開發(fā)任務(wù)提供幾個(gè)通用的方法。其中,,最有用的是GetMenu()方法,,通過抽取數(shù)據(jù)庫的記錄集,,自動(dòng)地生成表單及菜單列表框。 下面介紹的就是從數(shù)據(jù)庫動(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"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", "root", "root", "library") or die("Unable to connect!"); // 構(gòu)造并執(zhí)行一個(gè)查詢 $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ù)庫連接 $db->Close(); ?> </body> </html> GetMenu()方法需要傳入?yún)?shù),,用來控制列表框的行為。上例中第一個(gè)參數(shù)是列表框的名字(這個(gè)例子為“l(fā)ibrary”),;第二個(gè)參數(shù)是顯示時(shí)默認(rèn)的值,,可以為空,從第一個(gè)記錄開始,;第三個(gè)參數(shù),,指定列表框的項(xiàng)目是否為空;第四個(gè)參數(shù),,控制是否允許用戶多選,。 上例的顯示結(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)的值,,名稱為菜單框顯示的元素,。 由此可以看出,GetMenu()方法可以大幅度簡化Web開發(fā)任務(wù),,大大減少代碼量,。 11.輸出到文件ADODB還允許我們將記錄輸出為一個(gè)不同形式的文件:如逗號(hào)分隔符CSV文件,制表符表格,,甚至于HTML形式的表格,。 這些功能屬于ADODB的附屬功能,在使用時(shí)需要包含相關(guān)ADODB類文件,,下面是樣例的內(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"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", "root", "passwd", "library") or die("Unable to connect!"); // 構(gòu)造并執(zhí)行一個(gè)查詢 $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ù)庫的連接 $db->Close(); ?> 輸出結(jié)果如下: title,id Mystic River,15 Where Eagles Dare,16 XML and PHP,17 我們也可以去除結(jié)果中第一行,即字段的名稱,,使用腳本格式如下: // 返回一個(gè) CSV 字符串 echo rs2csv($result, false); 腳本的輸出結(jié)果將沒有字段名稱,,如下: 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"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", "root", "root", "library") or die("Unable to connect!"); // 構(gòu)造并執(zhí)行一個(gè)查詢 $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ù)庫連接 $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"); // 打開一個(gè)數(shù)據(jù)庫連接 $db->Connect("localhost", "root", "passwd", "library") or die("Unable to connect!"); // 構(gòu)造并執(zhí)行一個(gè)查詢 $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ù)庫連接 $db->Close(); ?> </body> </html> |
|