博客列表 >0618-用接口和抽象类实现数据的增删改查

0618-用接口和抽象类实现数据的增删改查

我的博客
我的博客原创
2019年06月19日 16:08:51750浏览

实例

<?php
// 定义一个接口,实现数据库常用操作: 增(insert)删(delete)改(update)查(select)
// 也可以叫Curd (create、update、read、delete)

//1、创建一个接口 ,接口不需要任何方法体
   // `interface`: 指定某个类必须实现的方法,但不需要定义方法的具体实现过程
  //接口中仅允许出现: 方法与类常量
  //接口的方法可见性必须是: public
  //接口的方法体必须是空的
  //接口是类的代码模板, 可以像类一样有父子继承关系,例如父接口, 子接口
  //`implements`: 类实现接口的关键字, 读音: ['implements,应波罗曼次]
  //如果仅是部分实现接口中的方法, 请用一个抽象类来实现它

interface iCurd
{
    //增加数据
    public function insert($data);
    //查询数据
    public function read();
    //更新数据
    public function update($data,$where);
   //删除数据
   // public function delete($where);
}

//2、创建抽象类
class Db implements iCurd
{
    //数据库连接对象
    protected $pdo=null;
    //数据表名
    protected $table='';
    //构造方法,每次调用自动连接数据库
    public function __construct($dsn,$user,$password,$table='staff')
    {
        $this->pdo = new PDO($dsn,$user,$password);
        $this->table = $table;
    }
    //查询数据库
    public function read($filelds='*',$where='',$limit='') //给个默认值,在不穿参数的时候使用默认值
    {

        $filelds = empty($filelds) ? '*' : $filelds;
        $where = empty($where) ? '' : ' WHERE '.$where;
        $limit = empty($limit) ? '' : ' LIMIT '.$limit;
        $sql = 'SELECT '. $filelds . ' FROM ' . $this->table .$where.$limit;
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
       return $stmt->fetchAll(PDO::FETCH_ASSOC);

    }
    //写入数据库,INSERT INTO 表名(属性名1,属性名2,属性名3) VALUES (value1,value2,value3);
    public function insert($data) //给个默认值,在不穿参数的时候使用默认值
    {

        $fields = '(name,age,sex,position,mobile,hiredate)'; //数据表字段是固定值
        $values = '(:name,:age,:sex,:position,:mobile,:hiredate)';//赋值给字段的变量值

        $sql = 'INSERT INTO ' . $this->table . $fields . ' VALUES ' . $values; //语句模板,不用赋值

        // 预处理执行新增操作
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($data);                                         //这里运行时赋值,数组自动键值对绑定

        echo $stmt->debugDumpParams();                                  //调试

        return [
            'count' => $stmt->rowCount(),
            'id' => $this->pdo->lastInsertID()
        ];
    }
    //更新数据库数据,UPDATE 表名称 SET `staff_id` = '11',
    //`name` = '乔峰',
    //`age` = '55',
    //`sex` = '1',
    //`position` = '帮主',
    //`mobile` = '19999999999',
    //`hiredate` = '6546543132'
    //WHERE `staff_id` = '11';
    public function update($data, $where)
    {
        //根据更新表的格式,1、获取到字段 2、赋值给字段
        $arrkey = array_keys($data);    //获取数组的键
        $set = '';
        foreach ($arrkey as $value)
        {
            //$set .= $value. '=: '.$value. ', ';
            $set .= $value . '=:' . $value . ', '; //下边是更新2个字段所以这里是2个$value
        }
        $set = rtrim($set, ', ');
        $sql = 'UPDATE '.$this->table.' SET '. $set.' WHERE '.$where;
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($data);                                         //这里运行时赋值,数组自动键值对绑定
       // echo $stmt->debugDumpParams();   //调试
        return $stmt->rowCount();
    }

    //删除数据
    public function delete($where)
    {
        // 预处理执行删除操作
        $sql = 'DELETE FROM ' . $this->table . ' WHERE ' . $where;
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        return $stmt->rowCount();
    }
}
$dsn = 'mysql:host=127.0.0.1;dbname=staff';
$user = 'root';
$password = 'root';
//$table = 'staff';
$db = new Db($dsn,$user,$password);
//var_dump($db);

//foreach ($db->create('staff_id,sex,name,mobile','staff_id>1','3') as $dq)
//{
//print_r($dq);
//echo '<br>';
//}

//新增
//$data = [
//    'name'=>'东方不败',
//    'age'=>99,
//    'sex'=>1,
//    'position'=>'教主',
//    'mobile'=>'1999999999',
//    'hiredate' =>time()
//];
//
//$indb =  $db->insert($data);
//echo '成功新增' . $indb['count'] . '条记录,最新记录的主键ID是:' . $indb['id'];


//更新
//$data = [
//    'age' => 40,
//    'position' => '抗金英熊'
//];
//
//$updb = $db->update($data,'staff_id=14');  //方法里有返回值才能这样用
//echo '成功更新了'. $updb . '条记录';

//删除操作
$dldb = $db->delete('staff_id=14');
echo '你成功删除了' . $dldb . '数据';

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议