博客列表 >封装PDO预处理CURD操作--2018年5月1日8时12分发布(26日作业)

封装PDO预处理CURD操作--2018年5月1日8时12分发布(26日作业)

lilove的博客
lilove的博客原创
2018年05月01日 08:20:101279浏览

主题:

创建PDO函数库文件,将数据库常用操作进行封装:
连接,新增,更新,单条查询,多条查询,删除

构思:

将PDO预处理CURD操作流程写成函数,将实际应用数值全部用变量代替,可自由设置变量值复用函数。

在老师代码基础上稍作修改。

函数库代码实例:

<?php
/**
 * PDO数据库操作函数库
 */

//连接数据库
if (!function_exists('connect'))
{
    /**
     * 数据库连接
     * @param $dbname
     * @param string $type
     * @param string $host
     * @param string $charset
     * @param int $port
     * @param string $user
     * @param string $pass
     * @return PDO
     */
    function connect( $dbname,$type='mysql',$host='127.0.0.1', $charset='utf8', $port=3306,$user='root',$pass='root')
    {
        $dsn = "{$type}:host={$host}; dbname={$dbname}; charset={$charset}; port={$port}";//数据源
        //配置连接属性
        $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, $user, $pass, $options);
        } catch (PDOException $e) {
            die('Connect ERROR!:'.$e->getMessage());
        }
        return $pdo;
    }
}

//新增数据
if (!function_exists('insert')) {
    /**
     * 新增数据
     * @param $pdo
     * @param $table
     * @param $data
     * @return bool
     */
    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);

        //执行新增操作
        if($stmt->execute($data)){
            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);

        //执行新增操作
        if($stmt->execute($data)){
            if($stmt->rowCount()>0){
                return true;
            }
        } else {
            return false;
        }
    }
}

//查询单条数据
if (!function_exists('find')) {
    /**
     * 查询单条记录
     * @param $pdo
     * @param $table
     * @param $fields
     * @param string $where
     * @return bool
     */
    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;
        }
        //查询的结果只显示1条
        $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')) {
    /**
     * 查询多条记录
     * @param $pdo
     * @param $table
     * @param $fields
     * @param string $where
     * @return bool
     */
    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')) {
    /**
     * 删除记录
     * @param $pdo
     * @param $table
     * @param string $where
     * @return bool
     */
    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/pdo_pre_func.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'=>'朱老师111','sex'=>1, 'age'=>90,'salary'=>5900];
//insert($pdo,$table,$data);

//3.更新测试
$table = 'staff';
$where='staff_id=17'; //查询条件使用字符串直接传入
$data = ['name'=>'小月月','sex'=>0, 'age'=>30,'salary'=>500];  //更新后数据
//update($pdo,$table,$data,$where);

//4.单条查询测试
$table = 'staff';  //要查询的表名
$fields = ['name','age','salary'];  //查询表中指定字段数据
//$fields = '*';  //查询表中全部字段数据
//$fields = 'name,salary';
$where = 'age > 40';  //设置查询语句的WHERE条件
echo '<pre>'.print_r(find($pdo, $table, $fields, $where),true).'</pre>';

//5.多条查询测试
$table = 'staff';
$fields = ['name','age','salary'];
//$fields = '*';
$where = 'age < 40';
$order = 'name asc';
//echo '<pre>'.print_r(select($pdo, $table, $fields, $where, $order),true).'</pre>';

//6.删除测试
$table = 'staff';
$where = 'staff_id = 25';
//$where = '';
//delete($pdo, $table, $where);

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:

函数库需要引入到实际应用中才可使用,以上封装函数库还不能在大多数环境中使用,比较基础,需要增加查询条件才能在实际生产环境中使用。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议