複製代碼 代碼如下:
<?php
//定義資料庫變數
$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");//建立資料庫物件
$db->debug = true;//資料庫的DEBUG測試,預設值是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=2"方式
ADODB_FETCH_NUM 返回的記錄集中的索引,是數字形式,即資料庫欄位的排序次序值
ADODB_FETCH_ASSOC 返回的記錄集中的索引,是原資料庫欄位名
ADODB_FETCH_BOTH 和 ADODB_FETCH_DEFAULT 是同時返回以上兩種。某些資料庫不支援
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); # 返回的數組是: array([0]=>'v0',[1] =>'v1')
print_r($rs2->fields); # 返回的數組是: array(['col1']=>'v0',['col2'] =>'v1')
***/
//串連資料庫,方法有Connect,PConnect,NConnect,一般使用Connect
if (!@$db->Connect("$DB_HOST", "$DB_USER", "$DB_PASS", "$DB_DATABASE")) {
exit('<a href="/">伺服器忙,請稍候再訪問</a>');
}
/*
$db-> $rs-> 此類的使用方法
Execute($sql),執行參數中的$sql語句
SelectLimit($sql,$numrows=-1,$offset=-1) $numrows:取幾條記錄,$offset,從第幾條開始取,一般是用於分頁,或只取出幾條記錄的時候用
*/
//Example: 取出多個記錄
$sql = "Select * FROM table orDER BY id DESC";
if (!$rs = $db->Execute($sql)) {//執行SQL語句,並把結果返回給$rs變數
echo $db->ErrorMsg();//這個是列印出錯資訊
$db->Close();//關閉資料庫
exit();
}
while (!$rs->EOF) {//遍曆記錄集
echo $rs->fields['username'] . '<br>';
//print_r($rs->fields)試試,$rs->fields['欄位名'],返回的是這個欄位裡的值
$rs->MoveNext();//將指標指到下一條記錄,否則出現死迴圈!
}
$rs->Close();//關閉以便釋放記憶體
//插入新記錄
$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);
// 取單個記錄
//$db->GetRow($sql), 取第一條記錄,並返回一個數組,出錯返回false
$sql = "Select username,password,user_type FROM table Where id=3";
$data_ary = $db->GetRow($sql);
if ($data_ary == false) {
echo '沒有找到此記錄';
exit();
} else {
echo $data_ary['username'] . ' ' . $data_ary['password'] . ' ' . $data_ary['user_type'] . '<br>';
}
//另一種方法
$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'] . '<br>';
}
// 取單個欄位
//$db->GetOne($sql) 取出第一條記錄的第一個欄位的值,出錯則返回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的值
/*
在進行添加,修改,刪除記錄操作時,
要對字串型的欄位,使用$db->qstr()對使用者輸入的字元進行處理,
對數字型欄位,要進行資料判斷
更新記錄,注意:這是針對php.ini中,magic_quotes被設定為Off的情況,如果不確定,可以使用
$db->qstr($content,get_magic_quotes_gpc())
注意:content= 等號右邊,沒有單引號
*/
$sql = "Update table SET content=" . $db->qstr($content) . " Where id=2";
$db->Execute($sql);
/*$db->Insert_ID(),無參數,返回剛剛插入的那條記錄的ID值,僅支援部分資料庫,帶auto-increment功能的資料庫,如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 = 'adodbseq',$startID=1),產生一個ID值.$seqName:用於產生此ID的資料庫表名,$startID:起始值,一般不用設定,它會把$seqName中的值自動加1.支援部分資料庫,某些資料庫不支援
Insert_ID,GenID,一般我用GenID,使用它的目的,是在插入記錄後,要馬上得到它的ID時,才用
*/
/*Example:
先建立一個列名為user_id_seq的表,裡面只有一個欄位,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(),取出記錄集總數,無參數
它好像是把取出的記錄集,用count()數組的方法,取得資料的數量
如果取大量資料,效率比較慢,建議使用SQL裡的COUNT(*)的方法
$sql = "Select COUNT(*) FROM table", 用此方法時,不要在SQL裡加ORDER BY,那樣會降低執行速度
Example:
*/
$sql = "Select * FROM table orDER BY id DESC";
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
$record_nums = $rs->RecordCount();
/*
如果想對某一結果集,要進行兩次同樣的迴圈處理,可以用下面方法
以下,只是一個例子,只為說明$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'] . '<br>';//print_r($rs->fields)試試,$rs->fields['欄位名'],返回的是這個欄位裡的值
$rs->MoveNext();//將指標指到下一條記錄,不用的話,會出現死迴圈!
}
$username_ary = array_unique($username_ary);
$rs->MoveFirst();//將指標指回第一條記錄
while (!$rs->EOF) {
echo $rs->fields['password'] . '<br>';//print_r($rs->fields)試試,$rs->fields['欄位名'],返回的是這個欄位裡的值
$rs->MoveNext();//將指標指到下一條記錄
}
$rs->Close();
//當本頁程式,對資料庫的操作完畢後,要$db->Close();
$db->Close();
/*一個不錯的方法 */
if (isset($db)) {
$db->Close();
}
?>