接口实战的小案例:

<?phpnamespace _0802;// 接口实战的小案例
// 定义一个接口, 实现数据库的常用操作: CURD
interface iCurd
{// 增加数据public function create($data);// 读取数据public function read();// 更新数据public function update($data, $where);// 删除数据public function delete($where);
}// 创建Db类,实现iCurd接口
class Db implements iCurd
{// 数据库的连接对象protected $pdo = null;// 数据库protected $table;// 构造方法: 连接数据库,并设置默认的数据表public function __construct($dsn, $username, $password, $table){$this->pdo = new \PDO($dsn, $username, $password);$this->table = $table;}// 增加数据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);//        die($stmt->debugDumpParams());// 返回新增数据, 新增记录的id也返回return ['count' => $stmt->rowCount(),'id' => $this->pdo->lastInsertId()];}// 读取数据public function read($fileds = '*' , $where='', $limit = '0, 5'){// 设置查询条件$where = empty($where) ? '' : ' WHERE ' . $where;$limit = ' LIMIT ' . $limit;$sql = 'SELECT '. $fileds . ' FROM ' . $this->table. $where . $limit;$stmt = $this->pdo->prepare($sql);$stmt->execute();// 用二维数组返回所有数据return $stmt->fetchAll(\PDO::FETCH_ASSOC);}// 更新数据public function update($data, $where){// 难点在于SET参数$keyArr = array_keys($data);$set = '';// 遍历这个字段列表, 拼装 setforeach ($keyArr as $value) {$set .= $value . '= :' . $value. ',';}//age= :age,position= :position,把最后一个逗号删除$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';
$username = 'root';
$password = 'a757871402';
$table = 'staff';
$db = new Db($dsn, $username, $password, $table);// 新增操作
$data = ['name'=> '德斌','age'=> 23,'sex' => 1,'position' => '驸马','mobile'=> '1388888888','hiredate' => time()
];//$res = $db->create($data);
//echo '成功的新增了 '. $res['count']. '条记录, 新增的记录的ID是: '. $res['id'];echo '<hr>';// 查询操作
foreach ($db->read() as $item) {print_r($item); echo '<br>';
}echo '<hr>';// 查询操作
foreach ($db->read('staff_id, name,position, age', 'age > 50') as $item) {print_r($item); echo '<br>';
}// 更新操作
$data = ['age' => 40,'position' => '总裁'
];//$where = 'staff_id = 22';//echo '成功的更新了: ' . $db->update($data, $where) . ' 条记录';echo '<hr>';// 删除操作
$where = 'staff_id = 22';echo '成功的删除了: ' . $db->delete($where) . ' 条记录';

数据库

-- Adminer 4.7.2 MySQL dumpSET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';DROP TABLE IF EXISTS `staff`;
CREATE TABLE `staff` (`staff_id` int(3) NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(30) NOT NULL COMMENT '姓名',`age` tinyint(3) unsigned NOT NULL DEFAULT '25' COMMENT '年龄',`sex` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '1:男0:女',`position` varchar(20) NOT NULL COMMENT '职位',`mobile` char(11) NOT NULL COMMENT '手机号',`hiredate` int(10) unsigned NOT NULL COMMENT '入职时间',PRIMARY KEY (`staff_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `staff` (`staff_id`, `name`, `age`, `sex`, `position`, `mobile`, `hiredate`) VALUES
(1, '侯亮平',    43, 1,  '反贪局长',   '13576543210',    851356800),
(2, '祁同伟',    46, 1,  '公安厅长',   '13023458765',    1420041600),
(3, '高育良',    57, 1,  '政法书记',   '15678789933',    981734400),
(4, '李达康',    51, 1,  '市委书记',   '13088856222',    1336838400),
(5, '沙瑞金',    56, 1,  '省委书记',   '18956490987',    1179158400),
(6, '赵东来',    41, 1,  '公安局长',   '15999999999',    1375891200),
(7, '高小琴',    36, 0,  '山水庄园',   '18967678877',    1452528000),
(8, '陈清泉',    48, 1,  '外语学霸',   '13023487666',    1320940800),
(9, '钟小艾',    38, 0,  '反贪总局',   '13576588333',    1318348800),
(10,    '陆亦可',    35, 0,  '调查处长',   '13099912345',    1218297600),
(11,    '小龙女',    29, 0,  '古墓掌门',   '13989897754',    1378656000),
(12,    '韦小宝',    24, 1,  '太监总管',   '15709887875',    1560927140),
(13,    '郭靖', 44, 1,  '中原大侠',   '13576543422',    1560927140),
(14,    '灭绝师太',   68, 0,  '峨眉掌门',   '18909887655',    1481472000),
(15,    '李莫愁',    37, 0,  '赤炼仙子',   '13878665439',    1481472000),
(16,    '洪七公',    75, 1,  '丐帮帮主',   '13507665428',    1234567890),
(17,    '杨康', 32, 1,  '金国王爷',   '15805512348',    1560993700),
(18,    '梅超风',    49, 0,  '女魔头',    '17765443256',    1560993815),
(19,    '金轮法王',   52, 1,  '蒙古国师',   '13709887878',    1560994207),
(20,    '老顽童',    68, 1,  '全真教师叔',  '13688776548',    1560995043),
(21,    '欧阳克',    37, 1,  '大淫贼',    '19988776676',    1560993700);

PHP数据库CURD接口与实现(接口实战)相关推荐

  1. php写接口curd,8.2 php接口类 实现数据库CURD小案例

    php接口类 实现数据库CURD小案例 因为PHP只支持单继承,也就是说每个类只能继承一个父类.当声明的心累继承抽象类实现模板以后,它就不能再有其他的父类啦~ 为了解决这个问题,php引入了接口(注意 ...

  2. 【全栈接口测试进阶系列教程】精通api接口测试,接口分类,接口架构,http,webservice,dubbo接口协议,接口流程,接口工具,cookie,session,token接口鉴权原理以及实战

    目录 一,[什么是接口测试?为什么要作接口测试] 1.接口的作用 2.为什么要做接口测试 3.接口都有哪些类型? 二,[接口测试的分类] 接口的分类: http和webservice接口区别: 三,[ ...

  3. Mybatis、SpringBoot入门实战(微型项目) -- Mysql增删查改、写接口、测试接口

    Mybatis入门实战(微型项目) – Mysql增删查改.写接口.测试接口 开发环境: 1.Window10 v1909 2.idea 2019 3.jdk 1.8 4.mybatis 3.5.5 ...

  4. 太全面了!RF接口自动化框架项目实战

    以码同学VIP课程中的微服务项目进行接口自动化实战 01 搭建项目结构 创建一个项目,名字自己起,课上叫微服务项目接口测试框架,初始项目结构如下,不要着急对着图去创建,看下方解释再创建 配置:这是一个 ...

  5. 接口自动化测试:Postman实战教程

    01 接口测试 (1)服务器端(server):在使用别人的服务器上,例如微信APP客户端,服务端在腾讯的服务端上,微信上的账号信息,聊天记录均存储在服务端上:用户A发送1条信息到服务端上,服务端再把 ...

  6. ML之XGBoost:XGBoost案例应用实战(原生接口实现+Scikit-learn接口实现)

    ML之XGBoost:XGBoost案例应用实战(原生接口实现+Scikit-learn接口实现) 目录 XGBoost原生接口实现 Scikit-learn接口实现 相关文章 ML之XGBoost: ...

  7. levedb 导入 mysql_[LevelDB] 数据库3:循序渐进 —— 操作接口

    数据库3:循序渐进 -- 操作接口 这一节将介绍数据库操作3个接口的实现,分别是Get.Put和Delete.介绍接口实现时,主要介绍数据的写入和读取,而先忽略这些操作可能触发的后台操作. Put和D ...

  8. AXI4协议之AXI4-Full接口详解及实战

    文章目录 AXI4总线协议 概述 AXI4-Full 接口 创建代码实例 代码分析 模块参数 输入输出 其他参数 写地址通道 写数据通道 写响应通道 读地址通道 读数据通道 代码阅读 一堆信号声明 一 ...

  9. Spring Boot电商项目52:订单模块一:订单模块介绍;(模块介绍;效果演示;数据库设计;9个接口介绍;)

    说明: (1)本篇博客的内容:本篇博客,简单梳理下[订单模块]的基本内容: (2)声明:[订单模块]是一个比较复杂的模块,其中涉及了订单的状态的改变和订单的流转:所以,本篇博客,只是简单介绍了[订单模 ...

  10. [Golang数据库专题1]datbase/sql接口

    目录 一 .引言 1.1 概述 1.2 包接口 二.database/sql接口(常用) 1.sql.Register 2.driver.Driver 3. driver.Conn 4. driver ...

最新文章

  1. Python IDE ——Anaconda+PyCharm的安装与配置
  2. 砸了140亿的计算机视觉,未来到底如何?
  3. 第三次学JAVA再学不好就吃翔(part44)--匿名内部类
  4. Linux抓包工具tcpdump命令详解
  5. 工作167:eachrt解决问题方法思路
  6. 大话细说ORM -----(转)
  7. Springboot,log文件配置时,logging.file.name与logging.file
  8. 解决爬取网站过程中遇到的HTTP Error 302错误和中文乱码问题
  9. ubuntu服务器系统分区大小,服务器Ubuntu系统分区教程
  10. Java正则表达式简介及实例
  11. Kafka集群的安装和使用
  12. PyCharm下载和安装教程
  13. UE4中3DUI防遮挡显示/穿模部分透明化显示
  14. python 输出列表中元素的位置_python如何读取列表中元素的位置?
  15. 怎样才能成为一名优秀的高薪程序员?
  16. 云安全,到底是怎么一回事?
  17. html如何固定字号,css怎么控制字体大小?
  18. 从一个html页面传值到另一个页面,两个html之间的值传递(js location.search用法)
  19. iOS小技能:设置tableView的点击事件优先级低于cell的选中事件(场景:比如筛选视图,监听蒙版的点击事件就隐藏筛选视图)
  20. 我的架构梦:(七十) 消息中间件之RabbitMQ的消息可靠性

热门文章

  1. 自监督:对比学习contrastive learning
  2. Evasion 使用及实际免杀测试
  3. 怎么把电脑上的python软件卸载干净_怎么把一个软件卸载干净 把一个软件卸载干净的两种方法...
  4. JSP空间上当受骗篇
  5. java中instant_Instant
  6. python编写直角三角形边长公式_python 打印直角三角形,等边三角形,菱形,正方形的代码...
  7. 看黄天鹅如何下一颗高端鸡蛋?
  8. 前端交互之hover用法
  9. Failed to parse time specification
  10. 阿里云服务器能抗ddos攻击吗