PHP封装的数据库模型Model类完整示例【基于PDO】
本文实例讲述了PHP封装的数据库模型Model类。分享给大家供大家参考,具体如下:
tableName=PRE.$tableName;
//获取当前数据表中有哪些字段
$this->getFields();
}
/**
*获取当前表的所有字段
*@returnarray成功则返回一维数组字段
*/
publicfunctiongetFields()
{
//查看当前表结构
$sql="desc{$this->tableName}";
$res=$this->query($sql);//返回pdo对象
//var_dump($res);
if($res){
$arr=$res->fetchAll(2);
//var_dump($arr);
//从二维数组中取出指定下标的列
$this->allFields=array_column($arr,"Field");
return$this->allFields;
}else{
die("表名错误");
}
}
/**
*添加操作
*@paramarray$data要添加的数组
*@returnint返回受影响行数
*/
publicfunctionadd($data)
{
//判断是否是数组
if(!is_array($data)){
return$this;
}
//判断是否全是非法字段
if(empty($data)){
die("非法字段");
}
//过滤非法字段
foreach($dataas$k=>$v){
if(!in_array($k,$this->allFields)){
unset($data[$k]);
}
}
//将数组中的键取出
$keys=array_keys($data);
//将数组中取出的键转为字符串拼接
$key=implode(",",$keys);
//将数组中的值转化为字符串拼接
$value=implode("','",$data);
//准备SQL语句
$sql="insertinto{$this->tableName}({$key})values('{$value}')";
$this->sql=$sql;
//执行并发送SQL,返回受影响行数
return(int)$this->exec($sql);
}
/**
*删除操作
*@paramstring$id要删除的id
*@returnint返回受影响行数
*/
publicfunctiondelete($id="")
{
//判断id是否存在
if(empty($id)){
$where=$this->where;
}else{
$where="whereid={$id}";
}
$sql="deletefrom{$this->tableName}{$where}";
$this->sql=$sql;
//执行并发送SQL,返回受影响行数
return(int)$this->exec($sql);
}
/**
*修改操作
*@paramarray$data要修改的数组
*@returnint返回受影响行数
*/
publicfunctionupdate($data)
{
//判断是否是数组
if(!is_array($data)){
return$this;
}
//判断是否全是非法字段
if(empty($data)){
die('全是非法字段');
}
$str="";
//过滤非法字段
foreach($dataas$k=>$v){
//字段为id时,判断id是否存在的
if($k=="id"){
$this->where="whereid={$v}";
unset($data[$k]);
continue;
}
//若字段不为id,则过滤后再拼接成set字段
if(in_array($k,$this->allFields)){
$str.="{$k}='{$v}',";
}else{
unset($data[$k]);
}
}
//判断是否传了条件
if(empty($this->where)){
die('请传入修改条件');
}
//去除右边的,
$str=rtrim($str,',');
$sql="update{$this->tableName}set{$str}{$this->where}";
//echo$sql;
$this->sql=$sql;
return(int)$this->exec($sql);
}
/**
*查询多条数据
*@returnarray成功返回二维数组,失败返回空数组
*/
publicfunctionselect()
{
$sql="select{$this->field}from{$this->tableName}{$this->where}{$this->order}{$this->limit}";
$this->sql=$sql;
//执行SQL,结果集是一个对象
$res=$this->query($sql);
//判断是否查询成功,
if($res){
//成功返回二维数组
return$res->fetchAll(2);
}
//失败返回空数组
return[];
}
/**
*查询一条数组
*@paramstring$id要查询的id
*@returnarray返回一条数据
*/
publicfunctionfind($id="")
{
//判断是否存在id
if(empty($id)){
$where=$this->where;
}else{
$where="whereid={$id}";
}
$sql="select{$this->field}from{$this->tableName}{$where}{$this->order}limit1";
$this->sql=$sql;
//执行sql,结果集为对象
$res=$this->query($sql);
//判断是否查询成功
if($res){
//成功则返回一条数据(一维数组)
$result=$res->fetchAll(2);
return$result[0];
}
//失败返回空数组
return[];
}
/**
*统计总数目
*@returnint返回总数
*/
publicfunctioncount()
{
$sql="selectcount(*)astotalfrom{$this->tableName}{$this->where}limit1";
$this->sql=$sql;
//执行SQL,结果集为对象
$res=$this->query($sql);
//处理结果集
if($res){
$result=$res->fetchAll(2);
//var_dump($result);
return$result[0]["total"];
}
return0;
}
/**
*设置要查询的字段信息
*@paramstring$field要查询的字段
*@returnobject返回自己,保证连贯操作
*/
publicfunctionfield($field)
{
//判断字段是否存在
if(empty($filed)){
return$this;
}
$this->field=$field;
return$this;
}
/**
*获取最后执行的sql语句
*@returnstringsql语句
*/
publicfunction_sql()
{
return$this->sql;
}
/**
*where条件
*@paramstring$where要输入的where条件
*@returnobject返回自己,保证连贯操作
*/
publicfunctionwhere($where)
{
$this->where="where".$where;
return$this;
}
/**
*order条件
*@paramstring$order要输入的order条件
*@returnobject返回自己,保证连贯操作
*/
publicfunctionorder($order)
{
$this->order="orderby".$order;
return$this;
}
/**
*limit条件
*@paramstring$limit要输入的limit条件
*@returnobject返回自己,保证连贯操作
*/
publicfunctionlimit($limit)
{
$this->limit="limit".$limit;
return$this;
}
}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基于pdo操作数据库技巧总结》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。