加强版phplib的DB类
前端之家收集整理的这篇文章主要介绍了
加强版phplib的DB类,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
<div class="codetitle"><a style="CURSOR: pointer" data="35555" class="copybut" id="copybut35555" onclick="doCopy('code35555')"> 代码如下:
<div class="codebody" id="code35555">
<?
PHP /
**** 为了便于自己的开发,又不想使用ADODB、PEAR::DB这样的庞然大物,
就用在
PHPLibDB类的基础上、参考PEAR::DB类,封装的DB类,简单好使,非常方便。
MysqL有效 [连接
数据库] //包含
数据库处理类
文件 include_once("database.inc.
PHP"); //本地
数据库配置
define("DB_HOST","localhost");//
数据库服务器
define("DB_USER_NAME","root");//
数据库用户名 define("DB_USER_PASS","");//密码
define("DB_DATABASE","test");//
数据库 //连接本地
数据库 $db=newDB_
sql();
$db->connect(DB_DATABASE,DB_HOST,DB_USER_NAME,DB_USER_PASS); [使用
方法] //
获取所有记录
$
sql="SELECT
FROMtable1";
$all_record=$db->get_all($sql); //获取一条
$sql="SELECTFROMtable1WHEREid='1'";
$one_row=$db->get_one($
sql); //
分页查询,
提取20条记录
$
sql="SELECT
FROMtable1";
$page_record=$db->limit_query($sql,$start=0,$offset=20,$order="ORDERBYidDESC"); //提取指定数目的记录
$sql="SELECTFROMtable1";
$limit_record=$db->get_limit($
sql,10); //
统计记录数,
统计所有类型为学生的
$count=$db->count("table1","id","type='student'"); //插入一条记录
$info_array=array(
"name"=>"heiyeluren",
"type"=>"student",
"age"=>"22",
"gender"=>"boy"
);
$db->insert("table1",$info_array); //更新一条记录
$info_array=array(
"name"=>"heiyeluren",
"type"=>"teacher",
"gender"=>"boy"
);
$db->update("table1",$info_array,"name='heiyeluren'"); //
删除记录
$db->delete("table1","name='heiyeluren'"); //执行一条无结果集的
sql $db->execute("DELETEFROMtable1WHEREname='heiyeluren'");
****/ /*
文件:database.inc.
PHP 描述:数据库操作类
说明:本库使用
PHPLibDB库作为核心,同时
增加一些实用
方法,详细参考注释
/ classDB_sql
{ /public:connectionparameters
/
var$Host="";
var$Database="";
var$User="";
var$Password=""; /public:configurationparameters
/
var$Auto_Free=1;##Setto1forautomaticMysqL_free_result()
var$Debug=0;##Setto1fordebuggingmessages.
var$Halt_On_Error="yes";##"yes"(haltwithmessage),"no"(ignoreerrorsquietly),"report"(ignoreerrror,butspitawarning)
var$PConnect=0;##Setto1tousepersistentdatabaseconnections
var$Seq_Table="db_sequence"; /public:resultarrayandcurrentrownumber
/
var$Record=array();
var$Row; /public:currenterrornumberanderrortext
/
var$Errno=0;
var$Error=""; /public:thisisanapirevision,notaCVSrevision.
/
var$type="MysqL";
//var$revision="1.2"; /private:linkandqueryhandles
/
var$Link_ID=0;
var$Query_ID=0; var$locked=false;##settotruewhilewehavealock /public:constructor
/
functionDB_sql(){
$this->query($query);
} /public:sometrivialreporting
/
functionlink_id(){
return$this->Link_ID;
} functionquery_id(){
return$this->Query_ID;
} /public:connectionmanagement
/
functionconnect($Database="",$Host="",$User="",$Password=""){
/Handledefaults
/
if(""==$Database)
$Database=$this->Database; if(""==$Host)
$Host=$this->Host; if(""==$User)
$User=$this->User; if(""==$Password)
$Password=$this->Password;
/establishconnection,selectdatabase
/
if(0==$this->Link_ID){ if(!$this->PConnect){
$this->Link_ID=MysqL_connect($Host,$User,$Password);
}else{
$this->Link_ID=MysqL_pconnect($Host,$Password);
}
if(!$this->Link_ID){
$this->halt("connect($Host,\$Password)Failed.");
return0;
} if(!@MysqL_select_db($Database,$this->Link_ID)){
$this->halt("cannotusedatabase".$Database);
return0;
}
} return$this->Link_ID;
} /public:discardthequeryresult
/
functionfree(){
@MysqL_free_result($this->Query_ID);
$this->Query_ID=0;
} /public:performaquery
/
functionquery($Query_String){
/Noemptyqueries,please,since
PHP4chokesonthem.
/
if($Query_String=="")
/Theemptyquerystringispassedonfromtheconstructor,
whencallingtheclasswithoutaquery,e.g.insituations
likethese:'$db=newDB_
sql_Subclass;'
/
return0; if(!$this->connect()){
return0;/wealreadycomplainedinconnect()aboutthat.
/
}; #Newquery,discardprevIoUsresult.
if($this->Query_ID){
$this->free();
} if($this->Debug)
printf("Debug:query=%s
\n",$Query_String); $this->Query_ID=@MysqL_query($Query_String,$this->Link_ID);
$this->Row=0;
$this->Errno=MysqL_errno();
$this->Error=MysqL_error();
if(!$this->Query_ID){
$this->halt("Invalidsql:".$Query_String);
} #Willreturnnadaifitfails.That'sfine.
return$this->Query_ID;
} /public:walkresultset
/
functionnext_record(){
if(!$this->Query_ID){
$this->halt("next_recordcalledwithnoquerypending.");
return0;
} $this->Record=@MysqL_fetch_array($this->Query_ID);
$this->Row+=1;
$this->Errno=MysqL_errno();
$this->Error=MysqL_error(); $stat=is_array($this->Record);
if(!$stat&&$this->Auto_Free){
$this->free();
}
return$stat;
} /public:positioninresultset
/
functionseek($pos=0){
$status=@MysqL_data_seek($this->Query_ID,$pos);
if($status)
$this->Row=$pos;
else{
$this->halt("seek($pos)Failed:resulthas".$this->num_rows()."rows."); /halfassedattempttosavetheday,
butdonotconsiderthisdocumentedoreven
desireablebehav
IoUr.
/
@MysqL_data_seek($this->Query_ID,$this->num_rows());
$this->Row=$this->num_rows();
return0;
} return1;
} /public:tablelocking
/
functionlock($table,$mode="write"){
$query="locktables";
if(is_array($table)){
while(list($key,$value)=each($table)){
//textkeysare"read","readlocal","write","lowprioritywrite"
if(is_int($key))$key=$mode;
if(strpos($value,",")){
$query.=str_replace(","$key,$value)."$key,";
}else{
$query.="$value$key,";
}
}
$query=substr($query,-2);
}elseif(strpos($table,"$mode,$table)."$mode";
}else{
$query.="$table$mode";
}
if(!$this->query($query)){
$this->halt("lock()Failed.");
returnfalse;
}
$this->locked=true;
returntrue;
} functionunlock(){ //setbeforeunlocktoavoidpotentialloop
$this->locked=false; if(!$this->query("unlocktables")){
$this->halt("unlock()Failed.");
returnfalse;
}
returntrue;
} /public:evaluatetheresult(size,width)
/
functionaffected_rows(){
return@MysqL_affected_rows($this->Link_ID);
} functionnum_rows(){
return@MysqL_num_rows($this->Query_ID);
} functionnum_fields(){
return@MysqL_num_fields($this->Query_ID);
} /public:shorthandnotation
/
functionnf(){
return$this->num_rows();
} functionnp(){
print$this->num_rows();
} functionf($Name){
if(isset($this->Record[$Name])){
return$this->Record[$Name];
}
} functionp($Name){
if(isset($this->Record[$Name])){
print$this->Record[$Name];
}
} /public:sequencenumbers
/
functionnextid($seq_name){
/ifnocurrentlock,locksequencetable
/
if(!$this->locked){
if($this->lock($this->Seq_Table)){
$locked=true;
}else{
$this->halt("cannotlock".$this->Seq_Table."-hasitbeencreated?");
return0;
}
} /getsequencenumberandincrement
/
$q=sprintf("selectnextidfrom%swhereseq_name='%s'",
$this->Seq_Table,
$seq_name);
if(!$this->query($q)){
$this->halt('queryFailedinnextid:'.$q);
return0;
} /Nocurrentvalue,makeone
/
if(!$this->next_record()){
$currentid=0;
$q=sprintf("insertinto%svalues('%s',%s)",
$seq_name,
$currentid);
if(!$this->query($q)){
$this->halt('queryFailedinnextid:'.$q);
return0;
}
}else{
$currentid=$this->f("nextid");
}
$nextid=$currentid+1;
$q=sprintf("update%ssetnextid='%s'whereseq_name='%s'",
$nextid,
$seq_name);
if(!$this->query($q)){
$this->halt('queryFailedinnextid:'.$q);
return0;
} /ifnextid()lockedthesequencetable,unlockit
/
if($locked){
$this->unlock();
} return$nextid;
} /public:returntable
Metadata
/
functionMetadata($table="",$full=false){
$count=0;
$id=0;
$res=array(); / DuetocompatibilityproblemswithTablewechangedthebehavior
of
Metadata();
dependingon$full,Metadatareturnsthefollowingvalues:
-fullisfalse(default):
$result[]:
[0]["table"]tablename
[0]["name"]fieldname
[0]["type"]fieldtype
[0]["len"]fieldlength
[0]["flags"]fieldflags
-fullistrue
$result[]:
["num_fields"]numberofMetadatarecords
[0]["table"]tablename
[0]["name"]fieldname
[0]["type"]fieldtype
[0]["len"]fieldlength
[0]["flags"]fieldflags
["Meta"][fieldname]indexoffieldnamed"fieldname"
Thislastonecouldbeusedifyouhaveafieldname,butnoindex.
Test:if(isset($result['Meta']['myfield'])){...
/ //ifno$tablespecified,assumethatweareworkingwithaquery
//result
if($table){
$this->connect();
$id=@
MysqL_list_fields($this->Database,$table);
if(!$id){
$this->halt("
Metadataquery
Failed.");
returnfalse;
}
}else{
$id=$this->Query_ID;
if(!$id){
$this->halt("Noqueryspecified.");
returnfalse;
}
} $count=@
MysqL_num_fields($id); //madethisIFduetoperformance(oneifisfasterthan$countif's)
if(!$full){
for($i=0;$i<$count;$i++){
$res[$i]["table"]=@
MysqL_field_table($id,$i);
$res[$i]["name"]=@
MysqL_field_name($id,$i);
$res[$i]["type"]=@
MysqL_field_type($id,$i);
$res[$i]["len"]=@
MysqL_field_len($id,$i);
$res[$i]["flags"]=@
MysqL_field_flags($id,$i);
}
}else{//full
$res["num_fields"]=$count; for($i=0;$i<$count;$i++){
$res[$i]["table"]=@
MysqL_field_table($id,$i);
$res["
Meta"][$res[$i]["name"]]=$i;
}
} //freetheresultonlyifwewerecalledonatable
if($table){
@
MysqL_free_result($id);
}
return$res;
} /
public:findavailabletablenames/
functiontable_names(){
$this->connect();
$h=@
MysqL_query("showtables",$this->Link_ID);
$i=0;
while($info=@
MysqL_fetch_row($h)){
$return[$i]["table_name"]=$info[0];
$return[$i]["tablespace_name"]=$this->Database;
$return[$i]["database"]=$this->Database;
$i++;
} @
MysqL_free_result($h);
return$return;
} /
private:errorhandling/
functionhalt($msg){
$this->Error=@
MysqL_error($this->Link_ID);
$this->Errno=@
MysqL_errno($this->Link_ID); if($this->locked){
$this->unlock();
} if($this->Halt_On_Error=="no")
return; $this->haltmsg($msg); if($this->Halt_On_Error!="report")
die("Sessionhalted.");
} functionhaltmsg($msg){
printf("</td></tr></table>
Databaseerror:%s
\n",$msg);
printf("
MysqLError:%s(%s)
\n",
$this->Errno,
$this->Error);
}
//----------------------------------
//模块:
自定义函数 //
功能:部分实用的
数据库处理
方法 //作者:heiyeluren
//时间:2005-12-26
//---------------------------------- /
方法:execute($sql)
功能:执行一条sql语句,主要针对没有结果集返回的sql
参数:$sql需要执行的sql语句,例如:execute("DELETEFROMtable1WHEREid='1'")
返回:更新成功返回True,失败返回False
*/
functionexecute($sql)
{
if(empty($sql))
{
$this->error("Invalidparameter");
}
if(!$this->query($sql))
{
returnfalse;
}
returntrue;
} /
方法:get_all($sql)
功能:获取sql执行的所有记录
参数:$sql需要执行的sql,例如:get_all("SELECTFROMTable1")
返回:返回包含所有查询结果的二维数组
/
functionget_all($sql)
{
$this->query($sql);
$result_array=array();
while($this->next_record())
{ $result_array[]=$this->Record;
}
if(count($result_array)<=0)
{
return0;
}
return$result_array;
} /
方法:get_one($sql)
功能:获取sql执行的一条记录
参数:$sql需要执行的sql,例如:get_one("SELECTFROMTable1WHEREid='1'")
返回:返回包含一条查询结果的一维数组
/
functionget_one($sql)
{
$this->query($sql);
if(!$this->next_record())
{
return0;
}
return$this->Record;
} /*
方法:get_limit($sql,$limit)
功能:获取sql执行的指定数量的记录
参数:
$sql需要执行的sql,例如:SELECTFROMTable1
$limit需要限制的记录数
例如需要获取10条记录,get_limit("SELECTFROMTable1",10);
返回:返回包含所有查询结果的二维数组
/
functionget_limit($sql,$limit)
{
$this->query($sql);
$result_array=array();
for($i=0;$i<$limit&&$this->next_record();$i++)
{
$result_array[]=$this->Record;
}
if(count($result_array)<=0)
{
return0;
}
return$result_array;
} / 方法:limit_query($sql,$order="")
功能:为
分页的
获取sql执行的指定
数量的记录
参数:
$
sql需要执行的
sql,例如:SELECT
FROMTable1
$start记录的开始数,缺省为0
$offset记录的偏移量,缺省为20
$order排序方式,缺省为空,例如:ORDERBYidDESC
例如需要获取从0到10的记录并且按照ID号倒排,10,"ORDERBYidDESC");
返回:返回包含所有查询结果的二维数组
/
functionlimit_query($
sql,$order="")
{
$
sql=$
sql."$orderLIMIT$start,$offset";
$this->query($
sql);
$result=array();
while($this->next_record())
{
$result[]=$this->Record;
}
if(count($result)<=0)
{
return0;
}
return$result;
} /
方法:count($table,$field="",$where="")
功能:统计表中数据总数
参数:
$table需要统计的表名
$field需要统计的字段,默认为
$where条件语句,缺省为空
例如按照ID统计所有年龄小于20岁的用户,count("user_table","user_age<20")
返回:返回统计结果的数字
/
functioncount($table,$where="")
{
$sql=(empty($where)?"SELECTCOUNT($field)FROM$table":"SELECTCOUNT($field)FROM$tableWHERE$where");
$result=$this->get_one($sql);
if(!is_array($result))
{
return0;
}
return$result[0];
} / 方法:insert($table,$dataArray)
功能:插入一条记录到表里
参数:
$table需要插入的表名
$dataArray需要插入字段和值的数组,键为字段名,值为字段值,例如:array("user_name"=>"张三","user_age"=>"20岁");
例如比如插入
用户张三,年龄为20,insert("users",array("user_name"=>"张三","user_age"=>"20岁"))
返回:插入记录成功返回True,失败返回False
*/
functioninsert($table,$dataArray)
{
if(!is_array($dataArray)||count($dataArray)<=0)
{
$this->error("Invalidparameter");
}
while(list($key,$val)=each($dataArray))
{
$field.="$key,";
$value.="'$val',";
}
$field=substr($field,-1);
$value=substr($value,-1);
$
sql="INSERTINTO$table($field)VALUES($value)";
if(!$this->query($
sql))
{
returnfalse;
}
returntrue;
} /
方法:update($talbe,$dataArray,$where)
功能:更新一条记录
参数:
$table需要更新的表名
$dataArray需要更新字段和值的数组,键为字段名,值为字段值,例如:array("user_name"=>"张三","user_age"=>"20岁");
$where条件语句
例如比如更新姓名为张三的用户为李四,年龄为21
update("users","user_age"=>"20岁"),"user_name='张三'")
返回:更新成功返回True,失败返回False
*/
functionupdate($talbe,$where)
{
if(!is_array($dataArray)||count($dataArray)<=0)
{
$this->error("Invalidparameter");
}
while(list($key,$val)=each($dataArray))
{
$value.="$key='$val',";
}
$value=substr($value,-1);
$sql="UPDATE$talbeSET$valueWHERE$where";
if(!$this->query($sql))
{
returnfalse;
}
returntrue;
} /*
方法:delete($table,$where)
功能:删除一条记录
参数:
$table需要删除记录的表名
$where需要删除记录的条件语句
例如比如要删除用户名为张三的用户,delete("users","user_name='张三'")
返回:更新成功返回True,失败返回False
/
functiondelete($table,$where)
{
if(empty($where))
{
$this->error("Invalidparameter");
}
$sql="DELETEFROM$tableWHERE$where";
if(!$this->query($sql))
{
returnfalse;
}
returntrue;
} / 方法:error($msg="")
功能:
显示错误信息后中止脚本
参数:$msg需要显示的错误信息
返回:无返回
*/
functionerror($msg="")
{
echo"
Error
:$msg\n
\n";
exit();
} /*
方法:get_insert_id()
功能:获取最后插入的ID
参数:无参数
返回:关闭成功返回ID,失败返回0
/
functionget_insert_id()
{
return
MysqL_insert_id($this->Link_ID);
} /*
方法:close()
功能:关闭当前数据库连接
参数:无参数
返回:关闭成功返回true,失败返回false
/
functionclose()
{
return
MysqL_close($this->Link_ID);
}
}
?>