Blogger Information
Blog 49
fans 1
comment 0
visits 45175
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
依照课堂案例, 写一个接口, 完成基本的数据表操作:CURD(用接口跟类中的方法现实数据库的增删改查)2019年6月19日20点
Nick的博客
Original
921 people have browsed it

用接口跟类中的方法现实数据库的增删改查:

实例

<?php
//接口
interface iCurd
{
    //增加
    public function insert($data);
    //删除
    public function delete($where);
    //修改
    public function update($data,$where);
    //查询
    public function select();
}

class Db implements iCurd
{
    //连接数据库对象
    protected $pdo;
    //数据库表名
    protected $table;

    //构造方法
    public function __construct($dsn,$user,$password,$table = 'staff')
    {
        //创建pdo连接对象
        $this->pdo = new PDO($dsn,$user,$password);
        $this->table = $table;
    }

    //读取操作方法
    public function select($field = '*',$where = '',$limit = '1,5')
    {
        //设置查询条件
        $where = empty($where) ? '' : ' WHERE '.$where;
        //设置显示
        $limit = ' LIMIT '.$limit;

        //创建SQL预处理
        $sql = 'SELECT '.$field. ' FROM '.$this->table.$where.$limit;
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        //用fetchAll获取数据库数据,并return返回
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    //新增操作方法
    public function insert($data)
    {
        //SQL新增语句
        //INSERT INTO `表名` (字段列表)VALUE (值列表)
        //字段列表
        $fields = ' (name,age,sex,position,mobile,hiredate)';
        //值列表
        $values = ' (:name,:age,:sex,:position,:mobile,:hiredate)';
        //创建SQL预处理
        $sql = 'INSERT INTO '.$this->table.$fields.' VALUE '.$values;
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($data);

        //返回新增数量,新增记录的id组成的数据
        return [
            'count'=>$stmt->rowCount(),
            'id'=>$this->pdo->lastInsertId()
        ];
    }

    //更新,为了数据安全,不允许无条件更新
    public function update($data, $where)
    {
        // 难点在于SET 参数的处理上,利用传入$data数组,进行拆装

        //获取数组的键名组成的数组
        //array_keys():获取数组中的键名
        $keyArr = array_keys($data);
        $set = '';
        //遍历键名表示的字段列表,拼装预处理需要的SQL语句,注意占位符的表示
        //遍历获取键名数组的中的值:就是$data中的键名
        foreach ($keyArr as $value) {
            $set .= $value . ' = :' .$value. ', ';
        }

        //去掉最后一个逗号,注意每个逗号后面有一个空格,去除时也要带上这个空格
        //rtrim(第一个值为要清除的对象,第二个中值为要清除的字符):清楚指定的字符
        $set = rtrim($set,', ');

        //预处理执行更新操作
        $sql = 'UPDATE '.$this->table.' SET '.$set.' WHERE '.$where;
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($data);

        //返回被更新的记录数量
        return $stmt->rowCount();
    }

    //删除:与更新一样,这也是危险操作,不允许无条件删除
    public function delete($where)
    {
        //预处理执行删除操作
        $sql = 'DELETE FROM '.$this->table.' WHERE '.$where;
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        //返回被删除的记录数量
        return $stmt->rowCount();
    }
}

//实例化Db类
$dsn = 'mysql:host=127.0.0.1;dbname=php';
$name = 'root';
$password = 'root';
$db = new Db($dsn,$name,$password);

//遍历读取
foreach ($db->select() as $item) {
    print_r($item);
    echo '<br>';
}
echo '<hr>';

//设置查询条件
foreach ($db->select('staff_id, name, position','age > 50')as $item) {
    print_r($item);
    echo '<br>';
}

echo'<hr>';

//新增数据,$data是一个数组,
//在类的方法中已经设置好了字段列表和值列表模板,
//在$data中填入需要添加的字段和对应的值即可
$data = [
    'name'=>'郭靖',
    'age'=>30,
    'sex'=>1,
    'position'=>'金刀驸马',
    'mobile'=>'13666668888',
    'hiredate'=>time()
];
$res = $db->insert($data);
echo '成功新增'.$res['count'].'条记录,最新记录的主键ID是: '.$res['id'];

echo '<hr>';

//更新操作,更新刚添加的:郭靖
$data = [
    'age' => 40,
    'position' => '抗金英雄'
];
//添加更新条件
$where = 'staff_id = 11';
echo '成功更新了:'. $db->update($data,$where).' 条记录';

echo '<hr>';

//删除记录
//添加删除条件
$where = 'staff_id = 11';
echo '成功删除了:'.$db->delete($where).' 条记录';

运行实例 »

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



最终在页面输出数据库的增删改查结果:

页面显示结果.png

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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!