Correction status:Uncorrected
Teacher's comments:
<?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 . '数据';
点击 "运行实例" 按钮查看在线实例