Blogger Information
Blog 61
fans 1
comment 0
visits 69585
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
0618-用接口和抽象类实现数据的增删改查
我的博客
Original
760 people have browsed it

实例

<?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 . '数据';

运行实例 »

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


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post