Correction status:Uncorrected
Teacher's comments:
以下代码将创建函数库文件,将数据库常用操作进行封装:包含对数据库的连接,新增,更新,单条查询,多条查询,删除的操作,与大家分享:
封装函数的代码:
<?php // 连接数据库 if(!function_exists('connect')) { function connect($dbname,$type='mysql',$host='127.0.0.1',$charset='utf8',$port=3306,$user='root') { $dsn = "{$type}:host={$host}; dbname={$dbname}; charset={$charset}; port={$port}";//数据源 $userName = 'root'; $password = 'root'; //配置连接属性 $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //设置错误模式 PDO::ATTR_CASE => PDO::CASE_NATURAL, //数据表字段保持不变 PDO::ATTR_EMULATE_PREPARES => true, //启用PDO模拟 PDO::ATTR_PERSISTENT => true, //启用持久性连接 ]; try { //实例化PDO类,创建PDO对象 $pdo = new PDO($dsn, $userName, $password, $options); } catch (PDOException $e) { die('Connect ERROR!:'.$e->getMessage()); } return $pdo; } } //新增数据 if (!function_exists('insert')) { function insert($pdo, $table, $data=[]) { //创建SQL语句 $sql = "INSERT IGNORE {$table} SET "; foreach (array_keys($data) as $field) { $sql .= $field.'=:'.$field.', '; } //去掉尾部逗号,并添加分号结束 $sql = rtrim(trim($sql),',').';'; //创建PDO预处理对象 $stmt = $pdo->prepare($sql); //绑定参数到预处理对象 foreach ($data as $field => $value) { $stmt->bindValue(":{$field}",$value); } //执行新增操作 if($stmt->execute()){ if($stmt->rowCount()>0){ return true; } } else { return false; } } } //更新数据 if (!function_exists('update')) { function update($pdo,$table,$data=[], $where='') { //创建SQL语句 $sql = "UPDATE {$table} SET "; foreach (array_keys($data) as $field) { $sql .= $field.'=:'.$field.', '; } //去掉尾部逗号,并添加分号结束 $sql = rtrim(trim($sql),','); //添加更新条件 if(!empty($where)) { $sql .= ' WHERE '. $where; }else{ exit('条件不能为空'); } //创建PDO预处理对象 $stmt = $pdo->prepare($sql); //绑定参数到预处理对象 foreach ($data as $field => $value) { $stmt->bindValue(":{$field}",$value); } //执行新增操作 if($stmt->execute()){ if($stmt->rowCount()>0){ return true; } } else { return false; } } } //查询单条数据 if (!function_exists('find')) { function find($pdo,$table,$fields, $where='') { //创建SQL语句 $sql = 'SELECT '; if (is_array($fields)) { foreach ($fields as $field) { $sql .= $field.', '; } } else { $sql .= $fields; } $sql = rtrim(trim($sql),','); $sql .= ' FROM '.$table; //添加查询条件 if(!empty($where)) { $sql .= ' WHERE '. $where; } $sql .= ' LIMIT 1'; //去掉尾部逗号,并添加分号结束 $sql = rtrim(trim($sql),',').';'; //创建PDO预处理对象 $stmt = $pdo->prepare($sql); //执行查询操作 if($stmt->execute()){ if($stmt->rowCount()>0){ $stmt->setFetchMode(PDO::FETCH_ASSOC); return $stmt->fetch(); } } else { return false; } } } //查询多条记录 if (!function_exists('select')) { function select($pdo,$table,$fields, $where='', $order='') { //创建SQL语句 $sql = 'SELECT '; if (is_array($fields)) { foreach ($fields as $field) { $sql .= $field.', '; } } else { $sql .= $fields; } $sql = rtrim(trim($sql),','); $sql .= ' FROM '.$table; //添加查询条件 if(!empty($where)) { $sql .= ' WHERE '. $where; } //添加排序条件 if(!empty($order)) { $sql .= ' order by '.$order; } //去掉尾部逗号,并添加分号结束 $sql = rtrim(trim($sql),',').';'; //创建PDO预处理对象 $stmt = $pdo->prepare($sql); //执行查询操作 if($stmt->execute()){ if($stmt->rowCount()>0){ $stmt->setFetchMode(PDO::FETCH_ASSOC); //返回一个二维数组 return $stmt->fetchAll(); } } else { return false; } } } //删除数据 if (!function_exists('delete')) { function delete($pdo,$table, $where='') { //创建SQL语句 $sql = "DELETE FROM {$table} "; //添加删除条件 if(!empty($where)) { $sql .= 'WHERE '. $where; }else{ exit('条件不能为空'); } //去掉尾部逗号,并添加分号结束 $sql = rtrim(trim($sql),',').';'; //创建PDO预处理对象 $stmt = $pdo->prepare($sql); //执行删除操作 if($stmt->execute()){ if($stmt->rowCount()>0){ return true; } } else { return false; } } }
点击 "运行实例" 按钮查看在线实例
测试文件代码:
<?php // 封装函数的测试 //导入函数库 require 'lib/func_pdo.php'; //1.连接测试 $type='mysql'; //默认数据库驱动 $host='127.0.0.1'; //默认主机 $dbname='php'; //数据库名称 $charset='utf8'; //默认编码 $port=3306; //默认端口 $user='root'; //用户名 $pass='root'; //用户密码 $pdo = connect($dbname,$type,$host,$charset,$port,$user,$pass); //2.新增测试 // $table = 'staff'; // $data = ['name'=>'jobing','sex'=>0, 'age'=>30,'salary'=>7000]; // insert($pdo,$table,$data); //3.更新测试 // $table = 'staff'; // $where='staff_id=11'; //查询条件使用字符串直接传入 // $data = ['name'=>'pzb','sex'=>1, 'age'=>31,'salary'=>7500]; // update($pdo,$table,$data,$where); //4.单条查询测试 // $table = 'staff'; // $fields = ['name','salary']; // $fields = 'name,salary'; // $where = 'salary > 7000'; // echo '<pre>'.print_r(find($pdo, $table, $fields, $where),true).'</pre>'; //5.多条查询测试 // $table = 'staff'; // $fields = ['name','salary']; // // $fields = '*'; // $where = 'salary > 7000'; // $order = 'name asc'; // echo '<pre>'.print_r(select($pdo, $table, $fields, $where, $order),true).'</pre>'; //6.删除测试 $table = 'staff'; $where = 'name = "小龙女"'; delete($pdo, $table, $where);
点击 "运行实例" 按钮查看在线实例
效果图:
源数据库图:
新增数据图:
更新数据图:
单条查询图:
多条查询图:
删除数据图:
总结:
将函数封装之后极大的方便了函数的调用,pdo封装的过程:
创建连接数据库的函数,增删改查都是建立在已经连接成功数据库的基础上;
创建增删改查的函数:创建SQL语句;去掉尾部逗号并添加分号结束;若有条件则添加对应的条件;创建PDO预处理对象;绑定参数到预处理对象;执行对应的操作。
备注:封装完成后,引用对应的封装文件,可直接调用封装好的函数,输入对应的参数即可。