復制代碼
代碼如下:
<?php
/*
MYSQL
資料庫訪問封裝類
MYSQL
數據訪問方式,php4支持以mysql_開頭的過程訪問方式,php5開始支持以mysqli_開頭的過程和mysqli面向對象
訪問方式,本封裝類以mysql_封裝
數據訪問的一般流程:
1,連接資料庫
mysql_connect
or
mysql_pconnect
2,選擇資料庫
mysql_select_db
3,執行SQL查詢
mysql_query
4,處理返回的數據
mysql_fetch_array
mysql_num_rows
mysql_fetch_assoc
mysql_fetch_row
etc
*/
class
db_mysql
{
var
$querynum
=
0
;
//當前頁面進程查詢資料庫的次數
var
$dblink
;
//資料庫連接資源
//鏈接資料庫
function
connect($dbhost,$dbuser,$dbpw,$dbname='',$dbcharset='utf-8',$pconnect=0
,
$halt=true)
{
$func
=
empty($pconnect)
?
'mysql_connect'
:
'mysql_pconnect'
;
$this->dblink
=
@$func($dbhost,$dbuser,$dbpw)
;
if
($halt
&&
!$this->dblink)
{
$this->halt("無法鏈接資料庫!");
}
//設置查詢字元集
mysql_query("SET
character_set_connection={$dbcharset},character_set_results={$dbcharset},character_set_client=binary",$this->dblink)
;
//選擇資料庫
$dbname
&&
@mysql_select_db($dbname,$this->dblink)
;
}
//選擇資料庫
function
select_db($dbname)
{
return
mysql_select_db($dbname,$this->dblink);
}
//執行SQL查詢
function
query($sql)
{
$this->querynum++
;
return
mysql_query($sql,$this->dblink)
;
}
//返回最近一次與連接句柄關聯的INSERT,UPDATE
或DELETE
查詢所影響的記錄行數
function
affected_rows()
{
return
mysql_affected_rows($this->dblink)
;
}
//取得結果集中行的數目,只對select查詢的結果集有效
function
num_rows($result)
{
return
mysql_num_rows($result)
;
}
//獲得單格的查詢結果
function
result($result,$row=0)
{
return
mysql_result($result,$row)
;
}
//取得上一步
INSERT
操作產生的
ID,只對表有AUTO_INCREMENT
ID的操作有效
function
insert_id()
{
return
($id
=
mysql_insert_id($this->dblink))
>=
0
?
$id
:
$this->result($this->query("SELECT
last_insert_id()"),
0);
}
//從結果集提取當前行,以數字為key表示的關聯數組形式返回
function
fetch_row($result)
{
return
mysql_fetch_row($result)
;
}
//從結果集提取當前行,以欄位名為key表示的關聯數組形式返回
function
fetch_assoc($result)
{
return
mysql_fetch_assoc($result);
}
//從結果集提取當前行,以欄位名和數字為key表示的關聯數組形式返回
function
fetch_array($result)
{
return
mysql_fetch_array($result);
}
//關閉鏈接
function
close()
{
return
mysql_close($this->dblink)
;
}
//輸出簡單的錯誤html提示信息並終止程序
function
halt($msg)
{
$message
=
"<html>\n<head>\n"
;
$message
.=
"<meta
content='text/html;charset=gb2312'>\n"
;
$message
.=
"</head>\n"
;
$message
.=
"<body>\n"
;
$message
.=
"資料庫出錯:".htmlspecialchars($msg)."\n"
;
$message
.=
"</body>\n"
;
$message
.=
"</html>"
;
echo
$message
;
exit
;
}
}
?>
㈡ 面向對象程序設計中的數據封裝指的是
對象內部數據結構的不可訪問性 輸入數據必須用保密密碼輸入,數據加密,這不是面向對象編程的特點;不可能在對象的內部數據結構上建立防火牆,所以它們不是面向對象編程中的數據隱藏。面向對象編程系統中的封裝單元是對象,對象之間只能通過接缺腔口交換信息,對象中的數據不能從外部隨意訪問,導致對象內部的數據結構不可訪問,數據隱藏在對象中。這就是面向對象編程中的數據隱藏所指的。Redis是一個鍵-值對資料庫,每個鍵是一個字元串對象,值可以是字元串對象、列表對象、哈希對象、集合對象、有序集合對象五種中的一種。Redis使用sds(簡單動態字元串)來表示最基本的字元串數據。這個結構記錄了用於保存字元串的位元組數組char buf[]、已用長度int len和未用長度int free。有點像java中的字元串對象。這個sds使用C字元串作為文字量,遵循C風格,以空字元' '作為字元串的結尾,這樣就可以直接重用C字元串函數庫的部分函數,但與C字元串相比,它有以下優點:直接保存字元串長度而不是像C一樣遍歷得到長度;通過預分配空間和釋放惰性空間,減少了修改字元串引起的內存重分配。空間預分配的意思是:當需要擴展字元數組的容量時,如果分配的長度將小於1MB,則預分配搏笑與當前len長度相同的位元組數,如果超過1MB,則分配1MB。惰性空間釋放是指當sds字元串被縮短時,多餘的位元組數組不被伏銀衫回收,而是通過增長free來記錄,這樣下次如果free本身足夠了,就不需要申請內存了。當然,也有可以調整為主動釋放的API。用二進制方法處理buf數組,保留二進制數據,這樣就可以保存除文本數據以外的其他格式,比如圖片、音視頻、壓縮文件等。