国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) php教程 ADODB類別使用_PHP教程

ADODB類別使用_PHP教程

Jul 21, 2016 pm 03:59 PM
mysql php 使用 例子 喜歡 資料庫 用的 程式 類別

MySQL的例子
PHP中最通用的數(shù)據(jù)庫是MySQL,所以我想你會喜歡下面的程序代碼,它連結到 localhost 的 MySQL 服務器,數(shù)據(jù)庫名稱是 mydab,并且執(zhí)行一個 SQL 的 select 指令查詢,查詢結果會一列列地印出來。

$db = mysql_connect("localhost", "root", "password");
mysql_select_db("mydb",$db);

$result = mysql_query("SELECT * FROM employees",$db);
if ($result === false) die("failed");

while ($fields = mysql_fetch_row($result)) {
?for ($i=0, $max=sizeof($fields); $i < $max; $i++) {
print $fields[$i].' ';
}
print "
n";
}

上列的程序代碼用顏色標出分段,第一段是連結的部分,第二段是執(zhí)行SQL指令,最后一段則是顯示字段,while循環(huán)掃描結果的每一列,而for循環(huán)掃描到每列的字段。

接下來是以ADODB的程序代碼得到同樣的結果:

?include("adodb.inc.php");
?$db = NewADOConnection('mysql');
?$db->Connect("localhost", "root", "password", "mydb");

?$result = $db->Execute("SELECT * FROM employees");
?if ($result === false) die("failed");
?
?while (!$result->EOF) {
??? for ($i=0, $max=$result->FieldCount(); $i < $max; $i++)
print $result->fields[$i].' ';
??? $result->MoveNext();
??? print "
n";
?}

現(xiàn)在改成指向Oracle數(shù)據(jù)庫,程序代碼只要修改第二行成為 NewADOConnection('oracle'),讓我們看一下完整的程序代碼...

與數(shù)據(jù)庫連結

include("adodb.inc.php");
$db = NewADOConnection('mysql');
$db->Connect("localhost", "root", "password", "mydb");

連結的程序代碼比起原來MySQL的程序代碼有老練一些,因為我們正是需要更老練些。在ADODB我們使用對象導向的方法來管理多樣數(shù)據(jù)庫的復雜性,我們用不同類(class)來控制不同數(shù)據(jù)庫。假如你不熟悉對象導向程序設計,別擔心!所有的復雜事情都隱藏在 NewADOConnection() 函數(shù)之后。

為了節(jié)省內存,我們只加載與你所連結數(shù)據(jù)庫相關的PHP程序代碼,我們通過調用NewADOConnection(databasedriver)來完成這件事,合法的數(shù)據(jù)庫驅動程序包含 mysql,mssql,oracle,oci8,postgres,sybase,vfp,access,ibase 以及許多其它的驅動程序。

接著我們通過調用 NewADOConnection() 來從連結類別產(chǎn)生一個新的對象實體,最后我們使用 $db->Connect() 來連結數(shù)據(jù)庫。

執(zhí)行SQL指令

$result = $db->Execute("SELECT * FROM employees");
if ($result === false) die("failed");

直接傳送SQL指令到服務器,當成功執(zhí)行之后,Execute()將傳回一個recordset對象,你可以如同上面所列來檢查$result。

一個初學者容易混淆的議題是,在ADODB有兩種類型的對象,連結對象以及recordset對象,我們何時用這些對象呢?

連結對象($db)是負責連結數(shù)據(jù)庫,格式化你的SQL查詢。而recordset對象($result)則是負責擷取結果并將響應數(shù)據(jù)規(guī)格化成文字或數(shù)組。

唯一我需要增加的事情是,ADODB提供許多有用的函數(shù)來讓INSERT及UPDATE指令更容易些,這點我們在進階的章節(jié)會提到。

擷取資料

while (!$result->EOF) {
?? for ($i=0, $max=$result->FieldCount(); $i < $max; $i++)
print $result->fields[$i].' ';
?? $result->MoveNext();
?? print "
n";
}

前面取得數(shù)據(jù)的范例很像從檔案讀數(shù)據(jù),在每一行我們首先檢查是否到了檔案的結尾(EOF),若還沒到結尾,循環(huán)掃過每列中的字段,然后移到下一行(MoveNext)接著重復同樣的事情。

$result->fields[]數(shù)組是由PHP數(shù)據(jù)庫延伸系統(tǒng)所產(chǎn)生的,有些數(shù)據(jù)庫延伸系統(tǒng)并不會以字段名稱建立該數(shù)組的索引,要強迫以名稱排序索引該數(shù)組,使用$ADODB_FETCH_MODE的通用變量。

??????? $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
??????? $rs1 = $db->Execute('select * from table');
??????? $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
??????? $rs2 = $db->Execute('select * from table');
??????? print_r($rs1->fields); // shows array([0]=>'v0',[1] =>'v1')
??????? print_r($rs2->fields); // shows array(['col1']=>'v0',['col2'] =>'v1')

如同你所見的上面例子,兩個recordset儲存并使用不同的取用模式,當recordset由Execute()產(chǎn)生后再設定$ADODB_FETCH_MODE。

ADOConnection

連結到數(shù)據(jù)庫的對象,執(zhí)行SQL指令并且有一組工具函數(shù)來標準格式化SQL指令,比如關聯(lián)與日期格式等指令。

其它有用的函數(shù)

$recordset->Move($pos)卷動目前的數(shù)據(jù)列,ADODB支持整個數(shù)據(jù)庫往前卷動,有一些數(shù)據(jù)庫并不支持往后的卷動,這倒不會是個問題,因為你能夠用暫存紀錄到快取來仿真往后卷動。

$recordset->RecordCount()傳回SQL指令存取到的紀錄筆數(shù),有些數(shù)據(jù)庫會因為不支持而傳回-1。

$recordset->GetArray()以數(shù)組的方式傳回結果。

rs2html($recordset)函數(shù)將傳進的recordset轉為HTML的表格格式。下例中以粗體字顯示相關用法:

include('adodb.inc.php');
include('tohtml.inc.php'); /* includes the rs2html function */
$conn = &ADONewConnection('mysql');
$conn->PConnect('localhost','userid','password','database');
$rs = $conn->Execute('select * from table');
rs2html($rs); /* recordset to html table */

還有許多其它有用的函數(shù)列示在文件之中,可從下列網(wǎng)址查得 http://php.weblogs.com/adodb_manual

進階題材

新增及更新

假設你要新增下列數(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

當你改用別的數(shù)據(jù)庫,可能就沒辦法新增數(shù)據(jù)。

第一個問題是,每一個數(shù)據(jù)庫各自有不同的內定日期格式,MySQL使用 YYYY-MM-DD 格式,而其它數(shù)據(jù)庫則有不同的內定格式,ADODB提供DBDate()函數(shù)來轉換不同數(shù)據(jù)庫之間的日期內定格式。

次一個問題是單引號(don't)的表示法,在MySQL可以直接使用單引號(don't),但在其它數(shù)據(jù)庫如Sybase、Access、 Microsoft SQL Server,則用兩個單引號表示(don''t),qstr()函數(shù)可以解決此問題。

我們如何使用這些函數(shù)?就像這樣:

$sql = "INSERT INTO table (id, thedate,note) values ("
?? . $ID . ','
?? . $db->DBDate($TheDate) .','
?? . $db->qstr($Note).")";
$db->Execute($sql);

ADODB還有$connection->Affected_Rows()函數(shù),傳回受最后update或delete指令影響的數(shù)據(jù)列數(shù),及$recordset->Insert_ID()函數(shù),傳回最后因insert指令而自動產(chǎn)生的數(shù)據(jù)列編號,預先提醒大家,沒有任何數(shù)據(jù)庫有提供這兩個函數(shù)。

MetaTypes

你可以得到關于字段的更多信息,透過recordset的方法FetchField($fieldoffset)傳回對象的3個屬性:name,type,max_length。

舉例說明:

$recordset = $conn->Execute("select adate from table");
$f0 = $recordset->FetchField(0);

結果$f0->name的內容是'adata',$f0->type將是'date',假如max_length不知道,其內容將會是-1。

處理不同數(shù)據(jù)庫的一個問題是,每一個數(shù)據(jù)庫對于相同的數(shù)據(jù)型態(tài)會有不同的稱呼,比如timestamp型態(tài)在某數(shù)據(jù)庫中稱為datetime,而另一個數(shù)據(jù)庫則稱為time,所以ADODB提供MetaType($type,$max_length)函數(shù)來標準化下列的數(shù)據(jù)型態(tài):

C: character and varchar types
X: text or long character (eg. more than 255 bytes wide).
B: blob or binary image
D: date
T: timestamp
L: logical (boolean)
I: integer
N: numeric (float, double, money)

在前面的例子中,

$recordset = $conn->Execute("select adate from table");
$f0 = $recordset->FetchField(0);
$type = $recordset->MetaType($f0->type, $f0->max_length);
print $type; /* should print 'D' */

Select指令的Limit及Top支持

ADODB有個$connection->SelectLimit($sql,$nrows,$offset)函數(shù)讓你擷取recordset的部分集合,這是採用Microsoft產(chǎn)品中的SELECT TOP用法,及PostgreSQL與MySQL中的SELECT. ..LIMIT用法的優(yōu)點,即使原來的資料庫並沒有提供此用法,本函數(shù)也模擬提供該使用方式。

快取支援

ADODB允許你在你的檔案系統(tǒng)中暫存recordset的數(shù)據(jù),並且在$connection->CacheExecute($secs2cache,$sql)及$connection->CacheSelectLimit($secs2cache,$sql,$nrows,$offset )等設定的時間間隔到達之後,才真正去做資料庫的查詢以節(jié)省時間。

PHP4 Session支援

ADODB也支援PHP4 session handler,你可以存放你的session變數(shù)在資料庫中,相關功能請參考 http://php.weblogs.com/adodb-sessions

鼓勵商業(yè)使用

假如你打算寫商用的PHP應用軟體來銷售,你也可以使用ADODB,我們依據(jù)GPL來出版ADODB,也就是說你可以合法地在商用應用軟體中引用,並保有你程式碼的所有權。強烈鼓勵ADODB的商業(yè)應用,我們自己內部也正以此理由如此使用中。

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/317254.htmlTechArticleMySQL的範例PHP中最通用的資料庫是MySQL,所以我想你會喜歡下面的程式碼,它連結到localhost 的MySQL 伺服器,資料庫名稱是mydab,並且執(zhí)...
本網(wǎng)站聲明
本文內容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在C中使用std :: Chrono 在C中使用std :: Chrono Jul 15, 2025 am 01:30 AM

std::chrono在C 中用於處理時間,包括獲取當前時間、測量執(zhí)行時間、操作時間點與持續(xù)時間及格式化解析時間。 1.獲取當前時間使用std::chrono::system_clock::now(),可轉換為可讀字符串但係統(tǒng)時鐘可能不單調;2.測量執(zhí)行時間應使用std::chrono::steady_clock以確保單調性,並通過duration_cast轉換為毫秒、秒等單位;3.時間點(time_point)和持續(xù)時間(duration)可相互操作,但需注意單位兼容性和時鐘紀元(epoch)

PHP如何處理環(huán)境變量? PHP如何處理環(huán)境變量? Jul 14, 2025 am 03:01 AM

toAccessenvironmentVariablesInphp,useGetenv()或$ _envsuperglobal.1.getEnv('var_name')retievesSpecificvariable.2。 $ _ en v ['var_name'] accessesvariablesifvariables_orderInphp.iniincludes“ e” .setVariablesViaCliWithvar = vualitephpscript.php,inapach

mysql公共表表達式(CTE)示例 mysql公共表表達式(CTE)示例 Jul 14, 2025 am 02:28 AM

CTE是MySQL中用於簡化複雜查詢的臨時結果集。它在當前查詢中可多次引用,提升代碼可讀性和維護性。例如,在orders表中查找每個用戶的最新訂單時,可通過CTE先獲取每個用戶的最新訂單日期,再與原表關聯(lián)獲取完整記錄。相比子查詢,CTE結構更清晰,邏輯更易調試。使用技巧包括明確別名、串聯(lián)多個CTE以及利用遞歸CTE處理樹形數(shù)據(jù)。掌握CTE能使SQL更優(yōu)雅高效。

為什麼我們評論:PHP指南 為什麼我們評論:PHP指南 Jul 15, 2025 am 02:48 AM

PHPhasthreecommentstyles://,#forsingle-lineand/.../formulti-line.Usecommentstoexplainwhycodeexists,notwhatitdoes.MarkTODO/FIXMEitemsanddisablecodetemporarilyduringdebugging.Avoidover-commentingsimplelogic.Writeconcise,grammaticallycorrectcommentsandu

php準備的語句與條款 php準備的語句與條款 Jul 14, 2025 am 02:56 AM

使用PHP預處理語句執(zhí)行帶有IN子句的查詢時,1.需根據(jù)數(shù)組長度動態(tài)生成佔位符;2.使用PDO時可直接傳入數(shù)組,用array_values確保索引連續(xù);3.使用mysqli時需構造類型字符串並綁定參數(shù),注意展開數(shù)組的方式及版本兼容性;4.避免拼接SQL、處理空數(shù)組和確保數(shù)據(jù)類型匹配。具體做法是:先用implode與array_fill生成佔位符,再依擴展特性綁定參數(shù),從而安全執(zhí)行IN查詢。

如何避免PHP中未定義的索引錯誤 如何避免PHP中未定義的索引錯誤 Jul 14, 2025 am 02:51 AM

避免“undefinedindex”錯誤的關鍵方法有三:首先,使用isset()檢查數(shù)組鍵是否存在並確保值不為null,適用於大多數(shù)常規(guī)場景;其次,使用array_key_exists()僅判斷鍵是否存在,適用於需要區(qū)分鍵不存在和值為null的情況;最後,使用空合併運算符??(PHP7 )簡潔地設置默認值,推薦用於現(xiàn)代PHP項目,同時注意表單字段名拼寫、謹慎使用extract()及遍歷前檢查數(shù)組非空以進一步規(guī)避風險。

為MySQL表中的列選擇適當?shù)臄?shù)據(jù)類型 為MySQL表中的列選擇適當?shù)臄?shù)據(jù)類型 Jul 15, 2025 am 02:25 AM

insetTingUpmysqltables,選擇theStherightDatatatPesisionCrucialForeffifeffifeffifeffificeFifeffifeFrifeFifeScalible

PHP準備的聲明獲得結果 PHP準備的聲明獲得結果 Jul 14, 2025 am 02:12 AM

在PHP中使用預處理語句獲取數(shù)據(jù)庫查詢結果的方法因擴展而異,1.使用mysqli時可通過get_result()配合fetch_assoc()獲取關聯(lián)數(shù)組,適用於現(xiàn)代環(huán)境;2.也可使用bind_result()綁定變量,適合字段少、結構固定的情況,兼容性好但字段多時較繁瑣;3.使用PDO時通過fetch(PDO::FETCH_ASSOC)獲取關聯(lián)數(shù)組,或用fetchAll()一次性獲取所有數(shù)據(jù),接口統(tǒng)一且錯誤處理更清晰;此外需注意參數(shù)類型匹配、執(zhí)行execute()、及時釋放資源及開啟錯誤報告以

See all articles