Blogger Information
Blog 61
fans 0
comment 0
visits 53928
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
接口实战(数据库的CURD操作)
笑颜常开的博客
Original
1127 people have browsed it

<?php
interface iCurd{
//    增加数据
   public function create($data);


//读取数据
   public function read();
//更新数据
   public function update($data,$where);
//删除数据
   public function delete($where);
}
//创建工作类Db,来实现iCurd接口

// 创建Db类, 实现iCurd接口,完成基本的数据库操作
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($fields='*', $where='', $limit='0, 5')
   {
       // 设置查询条件
       $where = empty($where) ? '' : ' WHERE ' . $where;
       // 设置显示数量
       $limit = ' LIMIT ' . $limit;

       // 预处理查询操作
       $sql = 'SELECT '.$fields.' FROM '.$this->table.$where.$limit;
       $stmt = $this->pdo->prepare($sql);
       $stmt->execute();

       // 返回二维数组表示的查询结果集
       return $stmt->fetchAll(PDO::FETCH_ASSOC);
   }
   // 新增, 参数是数组: 新记录的键值对
   public function create($data)
   {
       // 字段列表
       $fields = ' (name,age,sex,position,mobile,hiredate)';
       // 值列表
       $values = '(:name,:age,:sex,:position,:mobile,:hiredate)';
       // 创建SQL语句
       $sql = 'INSERT INTO '.$this->table.$fields.' VALUES '.$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数组,进行拆装

       // 获取数组的键名组成的数组
       $keyArr = array_keys($data);
       $set = '';
       // 遍历键名表示的字段列表,拼装预处理需要的sql语句,注意占符符的表示
       foreach ($keyArr as $value) {
           $set .= $value . ' = :' .$value. ', ';
       }
       // 去掉最后一个逗号, 注意每个逗号后有一个空格,去除时也要带上这个空格
       $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();
   }
}
//客户端的测试代码
$dsn='mysql:host=127.0.0.1;dbname=php';
$user='root';
$password='root';
$db=new Db($dsn,$user,$password);
foreach ($db->read() as $item){
   print_r($item);echo '<br>';
}
echo '<hr>';

//$data=[
//    'name'=>'郭靖',
//    'age'=>30,
//    'sex'=>1,
//    'position'=>'金刀驸马',
//    'mobile'=>'07916586437',
//    'hiredate'=>time()
//];
//$res=$db->create($data);
//echo '成功地新增了'.$res['count'].'条记录,最新记录的id是:'.$res['id'];
//echo '<hr>';

//更新
//$data=['age'=>40,'position'=>'抗金英雄'];
//$where='id=19';
//echo '成功地更新了:'.$db->update($data,$where).'条记录';
$where='id=19';
echo '成功地删除了:'.$db->delete($where).'条记录';

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