zoukankan      html  css  js  c++  java
  • PHP PDO的简单封装(使用命名空间方式)

    DAO:数据库访问对象(Database Access Object)

    直接上代码:要点都在注释中了

    namespace core;
    //引入全局空间类:PDO相关的3个类
    use PDO,PDOStatement,PDOException;
    
    class Dao{
        private $pdo;
        private $fetch_mode;    //获取结果集的模式
        /**
         *@desc 构造方法,获取pdo对象,设置字符集
         *@param1 array $info,数据库基本信息
         *@param2 array $info,数据库驱动配置
         */
        public function __construct($info = array(), $drivers = array()){
            $dbtype = $info['dbtype'] ?? 'mysql';
            $host = $info['host'] ?? 'localhost';
            $port = $info['port'] ?? '3306';
            $user = $info['user'] ?? 'root';
            $password = $info['password'] ?? '***';
            $dbname = $info['dbname'] ?? 'demo';
            $charset = $info['charset'] ?? 'utf8';
            $this->fetch_mode = $info['fetch_mode'] ?? PDO::FETCH_ASSOC;
    
            $drivers[PDO::ATTR_ERRMODE] = $drivers[PDO::ATTR_ERRMODE] ?? PDO::ERRMODE_EXCEPTION;
    
            $dsn = "{$dbtype}:host={$host};port={$port};dbname={$dbname}";
            try{
                $this->pdo = new PDO($dsn, $user, $password, $drivers);
            }catch(PDOException $e){
                die("数据库连接失败:{$e->getMessage()} in line {$e->getLine()}");
            }
            try{
                $this->pdo->exec("set names {$charset}");
            }catch(PDOException $e){
                die("字符集设置失败:{$e->getMessage()} in line {$e->getLine()}");
            }
        }
        /**
         * @desc 合并PDO::exec和PDO::query为同一个方法,类似mysqli的query函数
         * @param1 string $sql,SQL语句
         * @param2 bool $all,是否获取所有查询结果
         */
        public function query($sql,$all = true){
            $sql = trim($sql);
            $str1 = substr($sql,0,7);
            $str2 = substr($sql,0,5);
    
            if($str1 === 'select ' || $str2 === 'desc ' || $str2 === 'show '){
                //检查到是查询语句,使用PDO::query函数
                try{
                    $stmt = $this->pdo->query($sql);
                    if($all){
                        return $stmt->fetchAll($this->fetch_mode);
                    }else{
                        return $stmt->fetch($this->fetch_mode);
                    }
                }catch(PDOException $e){
                    die("数据库查询失败{$e->getMessage()} in line {$e->getLine()}");
                }
            } else {
                //否则使用PDO::exec函数
                try{
                    $row_num = $this->pdo->exec($sql);
                    $last_id = $this->pdo->lastInsertId();
                    //返回影响行数和lastInsertId,不是插入操作时lastInsertId为0
                    return array(
                        'row_num' => $row_num,
                        'last_id' => $last_id
                    );
                }catch(PDOException $e){
                    die("数据库操作失败{$e->getMessage()} in line {$e->getLine()}");
                }
            }
        }
    }
    //测试 $spdo = new Dao(); echo '<pre>'; var_dump($spdo); 
    print_r($spdo->query("select * from students")); 
    print_r($spdo->query("insert into students values(null,'sdff',22)")); 
    print_r($spdo->query("set names utf8"));
  • 相关阅读:
    学生管理系统(3:添加查询界面)
    Django模块笔记【六】
    Django模块笔记【五】
    Django模块笔记【四】
    Django模块笔记【三】
    Django模块笔记【二】
    Django模块笔记【一】
    网络编程基础【CSS编程】
    Django入门笔记【六】
    Django入门笔记【五】
  • 原文地址:https://www.cnblogs.com/chuanzi/p/10400615.html
Copyright © 2011-2022 走看看