Correction status:Uncorrected
Teacher's comments:
用接口跟类中的方法现实数据库的增删改查:
<?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).' 条记录';
点击 "运行实例" 按钮查看在线实例
最终在页面输出数据库的增删改查结果: