Correction status:Uncorrected
Teacher's comments:
使用PDO创建函数库文件,将数据库常用操作进行封装:
连接,新增,更新,单条查询,多条查询,删除
函数库代码分亨如下:
<?php /* PDO数据库操作函数库 */ //1.连接数据库 //判断函数是否存在,不存在才创建 if(!function_exists('connect')) { function connect($dbname,$type='mysql',$host='127.0.0.1',$charset='utf8',$port=3306,$user,$pass) { $dsn = "{$type}:host={$host}; dbname={$dbname};charset={$charset};port={$port}"; $userName = $user; $password = $pass; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_CASE => PDO::CASE_NATURAL, PDO::ATTR_EMULATE_PREPARES => true, PDO::ATTR_PERSISTENT => true, ]; try { $pdo = new PDO($dsn,$userName,$password,$options); } catch (PDOException $e) { die('Connect ERROR!:'.$e->getMessage()); } return $pdo; } } //2.新增数据测试 if (!function_exists('insert')) { //$pdo对象。 //$table:向哪个表里写数据 //$data:要写入哪些数据,用数组的方式 function insert($pdo, $table, $data=[]) { //1.创建sql语句: //INSERT IGNORE staff SET name :name,salsry :salary,....; //INSERT IGNORE staff SET name=:name,sex=:sex,age=:age,salary=:salary, $sql = "INSERT IGNORE {$table} SET "; //SET后的要写入的数据,要先从数组循环遍历后取出再拼接 //array_keys($data)获取数组中的键,作为字段 foreach (array_keys($data) as $field) { //拼接 $sql .= $field.'=:'.$field.','; } //先去空格:trim() //再删除右边指定的字符:rtrim() //添加分号 //再把数据赋给$sql //得到正确的SQL语句:INSERT IGNORE staff SET name=:name,sex=:sex,age=:age,salary=:salary; $sql = rtrim(trim($sql), ',').';'; //查看拼接后的SQL语句,调试用。 //die($sql); //得到正确的SQL语句后,开始创建stmt对象 $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; } } } } //3.更新数据 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), ','); //添加SQL语句的条件 if (!empty($where)) { //注意WHERE前后要有空格 $sql .= ' WHERE '. $where.';'; } else { exit('条件不能为空'); } //die($sql); //测试查看生成的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; } } } } //4.单条语句查询 if (!function_exists('find')) { //基本格式:SELECT $fields1,$fields2,... FROM $table WHERE ...; 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'.';'; //创建STMT对象 $stmt = $pdo->prepare($sql); //执行 if($stmt->execute()) {//判断结果集有没有数据 if($stmt->rowCount()>0) { $stmt->setFetchMode(PDO::FETCH_ASSOC); return $stmt->fetch(); } else { return false; } } //die($sql); } } //5.多条查询 if (!function_exists('select')) { //基本格式:SELECT $fields1,$fields2,... FROM $table WHERE ...; 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.';'; } //创建STMT对象 $stmt = $pdo->prepare($sql); //执行 if($stmt->execute()) {//判断结果集有没有数据 if($stmt->rowCount()>0) { $stmt->setFetchMode(PDO::FETCH_ASSOC); return $stmt->fetchAll(); } else { return false; } } //die($sql); } } //6.删除操作 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), ',').';'; //die('sql'); //创建PDO预处理对象 $stmt = $pdo->prepare($sql); //执行删除操作 if ($stmt->execute()) { if ($stmt->rowCount()>0) { return true; } else { return false; } } } }
点击 "运行实例" 按钮查看在线实例
点击 "运行实例" 按钮查看在线实例
测试文件代码如下:
<?php //1.连接数据库测试 require 'lib/0426hw_func_pdo.php'; $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'=>'朱老师','sex'=>0,'age'=>30,'salary'=>5000]; //insert($pdo, $table, $data); //3.更新数据测试 // $table = 'staff'; // $data = ['salary'=>111111]; // $where = 'name = "朱老师"'; // update($pdo, $table, $data, $where); //4.单条语句查询测试 // $table = 'staff'; // $fields = ['name', 'age', 'salary']; // $where = 'age < 40'; // echo '<pre>'.print_r(find($pdo, $table, $fields, $where),true).'</pre>'; //5.多条语句查询测试 // $table = 'staff'; // $fields = ['name', 'age', 'salary']; // $where = 'age < 60'; // $order = 'age ASC'; // echo '<pre>'.print_r(select($pdo, $table, $fields, $where, $order),true).'</pre>'; //6.删除测试 $table = 'staff'; $where = 'name = "懒羊羊"'; delete($pdo, $table, $where);
点击 "运行实例" 按钮查看在线实例
小结:
一开始,让SQL语句拼装难住了,直接蒙圈啦~~~~
一步一步跟着老师敲代码,几乎是一个函数一个函数的做注释,才算明白了拼装的步骤,但其实这里应该是最简单的地方,把老师以前讲的都忘光了。所以说,基础真的很重要!!!