常用的adodb使用方法,學(xué)習(xí)資料時(shí)間:2007-01-14 18:49:51 類別:
技術(shù),
PHP RSS 2.0 評(píng)論常用的adodb使用方法,學(xué)習(xí)資料
來源: http://www.feibao.net
<?php
/*
常用的ADODB使用方法
整理:飛豹游俠 QQ:8527385 E-mail:liuchengcn # 163.com
如有錯(cuò)誤之處,敬請(qǐng)諒解,并QQ或E-mail通知我,謝謝
*/
//定義數(shù)據(jù)庫變量
$DB_TYPE = "mysql";
$DB_HOST = "localhost";
$DB_USER = "root";
$DB_PASS = "";
$DB_DATABASE = "ai-part";
require_once("../adodb/adodb.inc.php");
$db = NewADOConnection("$DB_TYPE");//建立數(shù)據(jù)庫對(duì)象
$db->debug = true;//數(shù)據(jù)庫的DEBUG測(cè)試,程序開發(fā)期,可設(shè)置為true,正式版要注釋掉這行,(默認(rèn)值是false)
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
/*
返回的記錄集形式
define(‘ADODB_FETCH_DEFAULT‘,0);
define(‘ADODB_FETCH_NUM‘,1);
define(‘ADODB_FETCH_ASSOC‘,2);
define(‘ADODB_FETCH_BOTH‘,3);
以上的常量,是在adodb.inc.php里定義的,也就是$ADODB_FETCH_MODE 這個(gè)變量可以設(shè)置的值
常用的是:ADODB_FETCH_NUM 或 ADODB_FETCH_ASSOC
ADODB_FETCH_NUM 返回的記錄集中的索引,是數(shù)字形式,即數(shù)據(jù)庫字段的排序順序值
ADODB_FETCH_ASSOC 返回的記錄集中的索引,是原數(shù)據(jù)庫字段名
ADODB_FETCH_BOTH 和 ADODB_FETCH_DEFAULT 是同時(shí)返回 ADODB_FETCH_NUM, ADODB_FETCH_ASSOC的值,某些數(shù)據(jù)庫不支持
An example:
$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); # 返回的數(shù)組是: array([0]=>‘v0‘,[1] =>‘v1‘)
print_r($rs2->fields); # 返回的數(shù)組是: array([‘col1‘]=>‘v0‘,[‘col2‘] =>‘v1‘)
*/
//連接數(shù)據(jù)庫,方法有Connect,PConnect,NConnect,一般使用Connect. NConnect是連接特殊的數(shù)據(jù)庫時(shí)才用
if (!@$db->Connect("$DB_HOST", "$DB_USER", "$DB_PASS", "$DB_DATABASE")) {
exit(‘服務(wù)器忙,請(qǐng)稍候再訪問‘);
}
/*
$db-> $rs-> 此類的使用方法
Execute($sql,$inputarr=false),執(zhí)行參數(shù)中的$sql語句,后面的那個(gè)$inputarr參數(shù),一般情況下不需要
SelectLimit($sql,$numrows=-1,$offset=-1,$inputarr=false) $numrows:取幾條記錄,$offset,從第幾條開始取,SelectLimit,一般是用于分頁,或只取出幾條記錄的時(shí)候用
*/
//Example: 取出多個(gè)記錄
$sql = "SELECT * FROM table ORDER BY id DESC";
if (!$rs = $db->Execute($sql)) {//執(zhí)行SQL語句,并把結(jié)果返回給$rs變量
echo $db->ErrorMsg();//這個(gè)是打印出錯(cuò)信息
$db->Close();//關(guān)閉數(shù)據(jù)庫
exit();
}
while (!$rs->EOF) {//遍歷記錄集
echo $rs->fields[‘username‘] . ‘
‘;//print_r($rs->fields)試試,$rs->fields[‘字段名‘],返回的是這個(gè)字段里的值
$rs->MoveNext();//將指針指到下一條記錄,不用的話,會(huì)出現(xiàn)死循環(huán)!
}
$rs->Close();//關(guān)閉它,以便釋放內(nèi)存,每次操作完都進(jìn)行一次關(guān)閉,養(yǎng)成編程的好習(xí)慣
//插入新記錄
$sql = "INSERT table (user_type,username) VALUES (3, ‘liucheng‘)";
$db->Execute($sql);
//更新記錄
$sql = "UPDATE table SET user_type=3 WHERE id=2";
$db->Execute($sql);
//刪除記錄
$sql = "DELETE FROM table WHERE id=2";
$db->Execute($sql);
// 取單個(gè)記錄
//$db->GetRow($sql), 取出SQL中的第一條記錄,并返回一個(gè)數(shù)組,如果出錯(cuò),則返回false
$sql = "SELECT username,password,user_type FROM table WHERE id=3";
$data_ary = $db->GetRow($sql);
if ($data_ary == false) {//如果用===,可能不是你想要的結(jié)果
echo ‘沒有找到此記錄‘;
exit();
} else {
echo $data_ary[‘username‘] . ‘ ‘ . $data_ary[‘password‘] . ‘ ‘ . $data_ary[‘user_type‘] . ‘
‘;
}
//這里沒有用到$rs,則不需要$rs->Close();
//另一種方法 (使用上面的方法比較好,又方便)
$sql = "SELECT username,password,user_type FROM table WHERE id=3";
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
if (!$result = $rs->FetchRow()) {
echo ‘沒有找到此記錄‘;
exit();
} else {
echo $result[‘username‘] . ‘ ‘ . $result[‘password‘] . ‘ ‘ . $result[‘user_type‘] . ‘
‘;
}
//$db->GetOne($sql) 取出SQL中的第一條記錄的第一個(gè)字段的值,如果出錯(cuò),則返回false
$sql = "SELECT COUNT(id) FROM table";
$record_nums = $db->GetOne($sql);
echo $record_nums;
$sql = "SELECT username,password,user_type FROM table WHERE user_id=1";
$result = $db->GetOne($sql);
echo $result;//此值為記錄中的username的值
/*
在進(jìn)行添加,修改,刪除記錄操作時(shí),要對(duì)字符串型的字段,使用$db->qstr()對(duì)用戶輸入的字符進(jìn)行處理,對(duì)數(shù)字型字段,要在之前,進(jìn)行數(shù)據(jù)判斷
更新記錄,注意:這是針對(duì)php.ini中,magic_quotes被設(shè)置為Off的情況,如果不確定,可以使用
$db->qstr($content,get_magic_quotes_gpc())
注意:content= 等號(hào)右邊,沒有單引號(hào)
*/
$sql = "UPDATE table SET content=" . $db->qstr($content) . " WHERE id=2";
$db->Execute($sql);
/*$db->Insert_ID(),無參數(shù),返回剛剛插入的那條記錄的ID值,僅支持部分?jǐn)?shù)據(jù)庫,帶auto-increment功能的數(shù)據(jù)庫,如PostgreSQL, MySQL 和 MS SQL
*/
//Example:
$sql = "INSERT table (user_type,username) VALUES (3, ‘liucheng‘)";
$db->Execute($sql);
$data_id = $db->Insert_ID();
echo $data_id;
/*$db->GenID($seqName = ‘a(chǎn)dodbseq‘,$startID=1),產(chǎn)生一個(gè)ID值.$seqName:用于產(chǎn)生此ID的數(shù)據(jù)庫表名,$startID:起始值,一般不用設(shè)置,它會(huì)把$seqName中的值自動(dòng)加1.支持部分?jǐn)?shù)據(jù)庫,某些數(shù)據(jù)庫不支持
Insert_ID,GenID,一般我用GenID,使用它的目的,是在插入記錄后,要馬上得到它的ID時(shí),才用
*/
/*Example:
先創(chuàng)建一個(gè)列名為user_id_seq的表,里面只有一個(gè)字段,id,int(10),NOT NULL,然后插入一條值為0的記錄
*/
$user_id = $db->GenID(‘user_id_seq‘);
$sql = "INSERT table (id, user_type,username) VALUES (" . $user_id . ", 3, ‘liucheng‘)";
$db->Execute($sql);
/*
$rs->RecordCount(),取出記錄集總數(shù),無參數(shù)
它好像是把取出的記錄集,用count()數(shù)組的方法,取得數(shù)據(jù)的數(shù)量
如果取大量數(shù)據(jù),效率比較慢,建議使用SQL里的COUNT(*)的方法
$sql = "SELECT COUNT(*) FROM table", 用此方法時(shí),不要在SQL里加ORDER BY,那樣會(huì)降低執(zhí)行速度
Example:
*/
$sql = "SELECT * FROM table ORDER BY id DESC";
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
$record_nums = $rs->RecordCount();
/*
如果想對(duì)某一結(jié)果集,要進(jìn)行兩次同樣的循環(huán)處理,可以用下面方法
以下,只是一個(gè)例子,只為說明$rs->MoveFirst()的使用方法
*/
$sql = "SELECT * FROM table ORDER BY id DESC";
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
$username_ary = array();
while (!$rs->EOF) {
$username_ary[] = $rs->fields[‘username‘]
echo $rs->fields[‘username‘] . ‘
‘;//print_r($rs->fields)試試,$rs->fields[‘字段名‘],返回的是這個(gè)字段里的值
$rs->MoveNext();//將指針指到下一條記錄,不用的話,會(huì)出現(xiàn)死循環(huán)!
}
$username_ary = array_unique($username_ary);
$rs->MoveFirst();//將指針指回第一條記錄,無參數(shù)
while (!$rs->EOF) {
echo $rs->fields[‘password‘] . ‘
‘;//print_r($rs->fields)試試,$rs->fields[‘字段名‘],返回的是這個(gè)字段里的值
$rs->MoveNext();//將指針指到下一條記錄,不用的話,會(huì)出現(xiàn)死循環(huán)!
}
$rs->Close();
/*
當(dāng)本頁程序,對(duì)數(shù)據(jù)庫的操作完畢后,要$db->Close();
*/
$db->Close();
/*一個(gè)不錯(cuò)的方法 */
if (isset($db)) {
$db->Close();
}
?>