php mysql pdo 封装类_PHP封装的数据库模型Model类完整示例【基于PDO】

本文实例讲述了PHP封装的数据库模型Model类。分享给大家供大家参考,具体如下:

//引入配置文件

include "../Config/config.php";

class Model extends PDO

{

protected $tableName = "";//存储表名

protected $sql = "";//存储最后执行的SQL语句

protected $limit = "";//存储limit条件

protected $order = "";//存储order排序条件

protected $field = "*";//存储要查询的字段

protected $where = "";//存储where条件

protected $allFields = [];//存储当前表的所有字段

/**

* 构造方法 初始化

* @param string $tableName 要操作的表名

*/

public function __construct($tableName)

{

//连接数据库

parent::__construct('mysql:host='.HOST.';dbname='.DB.';charset=utf8;port='.PORT,USER,PWD);

//存储表名

$this->tableName = PRE.$tableName;

//获取当前数据表中有哪些字段

$this->getFields();

}

/**

* 获取当前表的所有字段

* @return array 成功则返回一维数组字段

*/

public function getFields()

{

//查看当前表结构

$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("表名错误");

}

}

/**

* 添加操作

* @param array $data 要添加的数组

* @return int 返回受影响行数

*/

public function add($data)

{

//判断是否是数组

if (!is_array($data)) {

return $this;

}

//判断是否全是非法字段

if (empty($data)) {

die("非法字段");

}

//过滤非法字段

foreach($data as $k => $v){

if (!in_array($k,$this->allFields)) {

unset($data[$k]);

}

}

//将数组中的键取出

$keys = array_keys($data);

//将数组中取出的键转为字符串拼接

$key = implode(",",$keys);

//将数组中的值转化为字符串拼接

$value = implode("','",$data);

//准备SQL语句

$sql = "insert into {$this->tableName} ({$key}) values('{$value}')";

$this->sql = $sql;

//执行并发送SQL,返回受影响行数

return (int)$this->exec($sql);

}

/**

* 删除操作

* @param string $id 要删除的id

* @return int 返回受影响行数

*/

public function delete($id="")

{

//判断id是否存在

if (empty($id)) {

$where = $this->where;

}else{

$where = "where id={$id}";

}

$sql = "delete from {$this->tableName} {$where}";

$this->sql = $sql;

//执行并发送SQL,返回受影响行数

return (int)$this->exec($sql);

}

/**

* 修改操作

* @param array $data 要修改的数组

* @return int 返回受影响行数

*/

public function update($data)

{

//判断是否是数组

if (!is_array($data)){

return $this;

}

//判断是否全是非法字段

if (empty($data)) {

die('全是非法字段');

}

$str = "";

//过滤非法字段

foreach ($data as $k=>$v) {

//字段为id时,判断id是否存在的

if ($k == "id"){

$this->where = "where id={$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);

}

/**

* 查询多条数据

* @return array 成功返回二维数组,失败返回空数组

*/

public function select()

{

$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 [];

}

/**

* 查询一条数组

* @param string $id 要查询的id

* @return array 返回一条数据

*/

public function find($id="")

{

//判断是否存在id

if (empty($id)){

$where = $this->where;

}else{

$where = "where id={$id}";

}

$sql = "select {$this->field} from {$this->tableName} {$where} {$this->order} limit 1";

$this->sql = $sql;

//执行sql,结果集为对象

$res = $this->query($sql);

//判断是否查询成功

if ($res){

//成功则返回一条数据(一维数组)

$result = $res->fetchAll(2);

return $result[0];

}

//失败返回空数组

return [];

}

/**

* 统计总数目

* @return int 返回总数

*/

public function count()

{

$sql = "select count(*) as total from {$this->tableName} {$this->where} limit 1";

$this->sql = $sql;

//执行SQL,结果集为对象

$res = $this->query($sql);

//处理结果集

if ($res){

$result = $res->fetchAll(2);

//var_dump($result);

return $result[0]["total"];

}

return 0;

}

/**

* 设置要查询的字段信息

* @param string $field 要查询的字段

* @return object 返回自己,保证连贯操作

*/

public function field($field)

{

//判断字段是否存在

if (empty($filed)){

return $this;

}

$this->field = $field;

return $this;

}

/**

* 获取最后执行的sql语句

* @return string sql语句

*/

public function _sql()

{

return $this->sql;

}

/**

* where条件

* @param string $where 要输入的where条件

* @return object 返回自己,保证连贯操作

*/

public function where($where)

{

$this->where = "where ".$where;

return $this;

}

/**

* order条件

* @param string $order 要输入的order条件

* @return object 返回自己,保证连贯操作

*/

public function order($order)

{

$this->order = "order by ".$order;

return $this;

}

/**

* limit条件

* @param string $limit 要输入的limit条件

* @return object 返回自己,保证连贯操作

*/

public function limit($limit)

{

$this->limit = "limit ".$limit;

return $this;

}

}

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基于pdo操作数据库技巧总结》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:PHP模型Model类封装数据库操作示例

PHP面向对象之领域模型+数据映射器实例(分析)

自制PHP框架之模型与数据库

thinkphp利用模型通用数据编辑添加和删除的实例代码

PHP的Yii框架中Model模型的学习教程

PHP7中I/O模型内核剖析详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值