PHP以mysqli方式连接类完整代码实例
本文所述的是一个在PHP中以mysqli方式连接数据库的一个数据库类实例,该数据库类是从一个PHP的CMS中整理出来的,可实现PHP连接数据库类,MySQLi版,兼容PHP4,对于有针对性需要的朋友可根据此代码进行优化和修改。
<?php
#==================================================================================================
#Filename:/db/db_mysqli.php
#Note:连接数据库类,MySQLi版
#==================================================================================================
#[类库sql]
classdb_mysqli
{
var$query_count=0;
var$host;
var$user;
var$pass;
var$data;
var$conn;
var$result;
var$prefix="qinggan_";
//返回结果集类型,默认是数字+字符
var$rs_type=MYSQLI_ASSOC;
var$query_times=0;#[查询时间]
var$conn_times=0;#[连接数据库时间]
var$unbuffered=false;
//定义查询列表
var$querylist;
var$debug=false;
#[构造函数]
function__construct($config=array())
{
$this->host=$config['host']?$config['host']:'localhost';
$this->port=$config['port']?$config['port']:'3306';
$this->user=$config['user']?$config['user']:'root';
$this->pass=$config['pass']?$config['pass']:'';
$this->data=$config['data']?$config['data']:'';
$this->debug=$config["debug"]?$config["debug"]:false;
$this->prefix=$config['prefix']?$config['prefix']:'qinggan_';
if($this->data)
{
$ifconnect=$this->connect($this->data);
if(!$ifconnect)
{
$this->conn=false;
returnfalse;
}
}
returntrue;
}
#[兼容PHP4]
functiondb_mysqli($config=array())
{
return$this->__construct($config);
}
#[连接数据库]
functionconnect($database="")
{
$start_time=$this->time_used();
if(!$this->port)$this->port="3306";
$this->conn=@mysqli_connect($this->host,$this->user,$this->pass,"",$this->port)orfalse;
if(!$this->conn)
{
returnfalse;
}
$version=$this->get_version();
if($version>"4.1")
{
mysqli_query($this->conn,"SETNAMES'utf8'");
if($version>"5.0.1")
{
mysqli_query($this->conn,"SETsql_mode=''");
}
}
$end_time=$this->time_used();
$this->conn_times+=round($end_time-$start_time,5);#[连接数据库的时间]
$ifok=$this->select_db($database);
return$ifok?true:false;
}
functionselect_db($data="")
{
$database=$data?$data:$this->data;
if(!$database)
{
returnfalse;
}
$this->data=$database;
$start_time=$this->time_used();
$ifok=mysqli_select_db($this->conn,$database);
if(!$ifok)
{
returnfalse;
}
$end_time=$this->time_used();
$this->conn_times+=round($end_time-$start_time,5);#[连接数据库的时间]
returntrue;
}
#[关闭数据库连接,当您使用持续连接时该功能失效]
functionclose()
{
if(is_resource($this->conn))
{
returnmysqli_close($this->conn);
}
else
{
returntrue;
}
}
function__destruct()
{
return$this->close();
}
functionset($name,$value)
{
if($name=="rs_type")
{
$value=strtolower($value)=="num"?MYSQLI_NUM:MYSQLI_ASSOC;
}
$this->$name=$value;
}
functionquery($sql)
{
if(!is_resource($this->conn))
{
$this->connect();
}
else
{
if(!mysql_ping($this->conn))
{
$this->close();
$this->connect();
}
}
if($this->debug)
{
$sqlkey=md5($sql);
if($this->querylist)
{
$qlist=array_keys($this->querylist);
if(in_array($sqlkey,$qlist))
{
$count=$this->querylist[$sqlkey]["count"]+1;
$this->querylist[$sqlkey]=array("sql"=>$sql,"count"=>$count);
}else{
$this->querylist[$sqlkey]=array("sql"=>$sql,"count"=>1);
}
}
else{
$this->querylist[$sqlkey]=array("sql"=>$sql,"count"=>1);
}
}
$start_time=$this->time_used();
$func=$this->unbuffered&&function_exists("mysqli_multi_query")?"mysqli_multi_query":"mysqli_query";
$this->result=@$func($this->conn,$sql);
$this->query_count++;
$end_time=$this->time_used();
$this->query_times+=round($end_time-$start_time,5);#[查询时间]
if(!$this->result)
{
returnfalse;
}
return$this->result;
}
functionget_all($sql="",$primary="")
{
$result=$sql?$this->query($sql):$this->result;
if(!$result)
{
returnfalse;
}
$start_time=$this->time_used();
$rs=array();
$is_rs=false;
while($rows=mysqli_fetch_array($result,$this->rs_type))
{
if($primary&&$rows[$primary])
{
$rs[$rows[$primary]]=$rows;
}
else
{
$rs[]=$rows;
}
$is_rs=true;
}
$end_time=$this->time_used();
$this->query_times+=round($end_time-$start_time,5);#[查询时间]
return($is_rs?$rs:false);
}
functionget_one($sql="")
{
$start_time=$this->time_used();
$result=$sql?$this->query($sql):$this->result;
if(!$result)
{
returnfalse;
}
$rows=mysqli_fetch_array($result,$this->rs_type);
$end_time=$this->time_used();
$this->query_times+=round($end_time-$start_time,5);#[查询时间]
return$rows;
}
functioninsert_id($sql="")
{
if($sql)
{
$rs=$this->get_one($sql);
return$rs;
}
else
{
returnmysqli_insert_id($this->conn);
}
}
functioninsert($sql)
{
$this->result=$this->query($sql);
$id=$this->insert_id();
return$id;
}
functionall_array($table,$condition="",$orderby="")
{
if(!$table)
{
returnfalse;
}
$table=$this->prefix.$table;
$sql="SELECT*FROM".$table;
if($condition&&is_array($condition)&&count($condition)>0)
{
$sql_fields=array();
foreach($conditionAS$key=>$value)
{
$sql_fields[]="`".$key."`='".$value."'";
}
$sql.="WHERE".implode("AND",$sql_fields);
}
if($orderby)
{
$sql.="ORDERBY".$orderby;
}
$rslist=$this->get_all($sql);
return$rslist;
}
functionone_array($table,$condition="")
{
if(!$table)
{
returnfalse;
}
$table=$this->prefix.$table;
$sql="SELECT*FROM".$table;
if($condition&&is_array($condition)&&count($condition)>0)
{
$sql_fields=array();
foreach($conditionAS$key=>$value)
{
$sql_fields[]="`".$key."`='".$value."'";
}
$sql.="WHERE".implode("AND",$sql_fields);
}
$rslist=$this->get_one($sql);
return$rslist;
}
//将数组写入数据中
functioninsert_array($data,$table,$insert_type="insert")
{
if(!$table||!is_array($data)||!$data)
{
returnfalse;
}
$table=$this->prefix.$table;//自动增加表前缀
if($insert_type=="insert")
{
$sql="INSERTINTO".$table;
}
else
{
$sql="REPLACEINTO".$table;
}
$sql_fields=array();
$sql_val=array();
foreach($dataAS$key=>$value)
{
$sql_fields[]="`".$key."`";
$sql_val[]="'".$value."'";
}
$sql.="(".(implode(",",$sql_fields)).")VALUES(".(implode(",",$sql_val)).")";
return$this->insert($sql);
}
//更新数据
functionupdate_array($data,$table,$condition)
{
if(!$data||!$table||!$condition||!is_array($data)||!is_array($condition))
{
returnfalse;
}
$table=$this->prefix.$table;//自动增加表前缀
$sql="UPDATE".$table."SET";
$sql_fields=array();
foreach($dataAS$key=>$value)
{
$sql_fields[]="`".$key."`='".$value."'";
}
$sql.=implode(",",$sql_fields);
$sql_fields=array();
foreach($conditionAS$key=>$value)
{
$sql_fields[]="`".$key."`='".$value."'";
}
$sql.="WHERE".implode("AND",$sql_fields);
return$this->query($sql);
}
functioncount($sql="")
{
if($sql)
{
$this->rs_type=MYSQLI_NUM;
$this->query($sql);
$rs=$this->get_one();
$this->rs_type=MYSQLI_ASSOC;
return$rs[0];
}
else
{
returnmysqli_num_rows($this->result);
}
}
functionnum_fields($sql="")
{
if($sql)
{
$this->query($sql);
}
returnmysqli_num_fields($this->result);
}
functionlist_fields($table)
{
$rs=$this->get_all("SHOWCOLUMNSFROM".$table);
if(!$rs)
{
returnfalse;
}
foreach($rsAS$key=>$value)
{
$rslist[]=$value["Field"];
}
return$rslist;
}
#[显示表名]
functionlist_tables()
{
$rs=$this->get_all("SHOWTABLES");
return$rs;
}
functiontable_name($table_list,$i)
{
return$table_list[$i];
}
functionescape_string($char)
{
if(!$char)
{
returnfalse;
}
returnmysqli_escape_string($this->conn,$char);
}
functionget_version()
{
returnmysqli_get_server_info($this->conn);
}
functiontime_used()
{
$time=explode("",microtime());
$used_time=$time[0]+$time[1];
return$used_time;
}
//Mysql的查询时间
functionconn_times()
{
return$this->conn_times+$this->query_times;
}
//MySQL查询资料
functionconn_count()
{
return$this->query_count;
}
#高效SQL生成查询,仅适合单表查询
functionphpok_one($tbl,$condition="",$fields="*")
{
$sql="SELECT".$fields."FROM".$this->db->prefix.$tbl;
if($condition)
{
$sql.="WHERE".$condition;
}
return$this->get_one($sql);
}
functiondebug()
{
if(!$this->querylist||!is_array($this->querylist)||count($this->querylist)<1)
{
returnfalse;
}
$html='<tablecellpadding="0"cellspacing="0"width="100%"bgcolor="#CECECE"><tr><td>';
$html.='<tablecellpadding="1"cellspacing="1"width="100%">';
$html.='<tr><thbgcolor="#EFEFEF"height="30px">SQL</th><thbgcolor="#EFEFEF"width="80px">查询</th></tr>';
foreach($this->querylistAS$key=>$value)
{
$html.='<tr><tdbgcolor="#FFFFFF"><divstyle="padding:3px;color:#6E6E6E;">'.$value['sql'].'</div></td>';
$html.='<tdalign="center"bgcolor="#FFFFFF"><divstyle="padding:3px;color:#000000;">'.$value["count"].'</div></td></tr>';
}
$html.="</table>";
$html.="</td></tr></table>";
return$html;
}
functionconn_status()
{
if(!$this->conn)returnfalse;
returntrue;
}
}
?>