Blogger Information
Blog 49
fans 0
comment 1
visits 46699
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php使用PDO封装数据库操作类库
失去过去的博客
Original
4014 people have browsed it

1、PDO类库操作封装

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/5/5 0005
 * Time: 22:23
 * 类中的静态成员:静态成员和静态方法
 * 作用域 :静态成员是属于类所有的,必须使用类进行调用,不能使用类对象的方法来调用
 * 静态成员在类中使用self::来调用类中的静态成员  在外部使用类名::来调用
 * 类成员的静态化是面向对象编程的一种趋势  有很多模拟手段
 *类中成员的静态化使用关键字:static来实现
 * 静态技术的使用场景还有静态延迟绑定技术
 *在静态方法中不能调用非静态属性 原因是php在执行过程中会先加载静态成员 而$this 并未执行所以报错
 *static 是根据上下文的调用者来决定;
 */

class Db
{
    private  $type;
    private $host;
    private $dbname;
    private $user;
    private $password;
    private $port;
    private $dsn;
    protected $options;
    public $pdo;
    public  function  __construct($type,$host,$dbname,$user,$password,$port=3306)
    {
        $this->dbname=$dbname;
        $this->user=$user;
        $this->password=$password;
        $this->port=$port;
        $this->type=$type;
        $this->host=$host;
        $this->dsn = "$this->type:host=$this->host;dbname=$this->dbname";
       $this->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对象
            $this->pdo = new PDO($this->dsn,$this->user,$this->password,$this->options);
//            		echo '连接成功';
        }catch(PDOException $e){
            //抛出异常
            die('ERROR:'.$e->getMessage());
        }

        return $this->pdo;

    }

    //插入数据
    public static function insert($pdo, $table, $data=[]){
        //	创建sql预处理语句
        $sql = "INSERT IGNORE {$table} SET ";
        foreach(array_keys($data) as $fileld){
            $sql .= $fileld.'=:'.$fileld.', ';
        }
        //去除sql语句的左右空格 并去除右边的逗号
        $sql = rtrim(trim($sql),',').';';

        //创建pdo预处理对象
        $stmt = $pdo->prepare($sql);
        //绑定参数到预处理对象
        foreach($data as $fileld => $value){
            $stmt->bindValue(":{$fileld}",$value);
        }
        //执行新增操作
        if($stmt->execute()){
            if($stmt->rowCount()>0){
                return true;
            }
        }else{
            return false;
        }
    }
    //更新数据
        public static 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('条件不能为空');
        }

//        创建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;
        }
    }
    //查询单条数据
    public static function find($pdo,$table,$fields,$where){
//    c创建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),', ').';';

        //创建stmt对象
        $stmt = $pdo->prepare($sql);
        //执行查询操作
        if ($stmt->execute()){
            if ($stmt->rowCount()>0){
                $stmt->setFetchMode(PDO::FETCH_ASSOC);
                return $stmt->fetch();
            }

        }else{
            return $stmt->error;
        }


}
//查询多条数据
    public static function select($pdo, $table, $fields, $where='', $order=''){
//            创建sql语句
        $sql = 'SELECT ';
        if (is_array($fields)){
            foreach($fields as $field){
                $sql .= $fiele.', ';
            }

        }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;
        }

}
//删除数据
    public static 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;
        }

}
    public function close()
    {
        //关闭PDO链接
        return $this->pdo = null;
    
    }
}

运行实例 »

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

2、测试demo

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/5/5 0005
 * Time: 22:23
 */
include 'class/Db.php';
$connect = new Db('mysql','127.0.0.1','php','root','root',3306);
Db::insert($connect->pdo,'user',['user_name'=>'lin','email'=>'dphp@qq.com','password'=>sha1(123456)]);

//更多方法请自行测试

//ECHO phpinfo();

运行实例 »

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


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post