php实现pdo数据库操作类过程详解

 更新时间:2022年12月21日 16:32:20   作者:TANKING-  
这篇文章主要介绍了php实现pdo数据库操作类过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

数据库操作类的优点

优点可以说是非常多了,常见的优点就是便于维护、复用、高效、安全、易扩展。例如PDO支持的数据库类型是非常多的,与mysqli不同的就是,PDO还支持其他数据库,一套写法多种数据库的匹配,而mysqli仅仅是支持mysql。

代码

Db.php

<?php
/**
 * 数据库的基本操作
 */
class Db
{
    // 数据库的默认连接参数
    private $dbConfig=[
        'db'=>'mysql', // 数据库类型
        'host'=>'localhost', // 主机名称
        'port'=>'3306', // 默认端口
        'user'=>'root', // 用户名
        'pass'=>'root', // 密码
        'charset'=>'utf8', // 默认字符集
        'dbname'=>'edu', // 默认数据库
    ];
    // 新增主键id
    public $insertId = null;
    // 受影响的记录
    public $num = 0;
    // 单例模式,本类的实例
    private static $instance = null;
    // 数据库的连接
    private $conn = null;
    /**
     * Db构造方法
     * 私有化以防止外部实例化
     */
    private function __construct($params=[])
    {
        // 初始化连接参数
        $this->dbConfig = array_merge($this->dbConfig,$params);
        // 连接数据库
        $this->connect();
    }
    /**
     * 禁止外部克隆该实例
     */
    private function __clone()
    {
        // TODO:Implement __clone() method.
    }
    /**
     * 获取当前类的单一实例
     */
    public static function getInstance($params=[])
    {
        if (!self::$instance instanceof self) {
            self::$instance = new self($params);
        }
        return self::$instance;
    }
    private function connect()
    {
        try{
            // 配置数据源DSN
            $dsn = "{$this->dbConfig['db']}:host={$this->dbConfig['host']};port={$this->dbConfig['port']};dbname={$this->dbConfig['dbname']};charset={$this->dbConfig['charset']}";
            // 创建PDO对象
            $this->conn = new PDO($dsn,$this->dbConfig['user'],$this->dbConfig['pass']);
            // 设置客户端字符集
            $this->conn->query("SET NAMES {$this->dbConfig['charset']}");
        }catch (PDOException $e){
            die('数据库连接失败'.$e->getMessage());
        }
    }
    /** 
     * 完成数据表的操作:CURD
     */
    public function exec($sql)
    {
        $num = $this->conn->exec($sql);
        // 如果有受影响的记录
        if($num > 0){
            // 如果是新增操作,初始化新增主键id属性
            if(null !==$this->conn->lastInsertId()){
                $this->insertId = $this->conn->lastInsertId();
            }
            $this->num = $num; // 返回受影响的记录
        }else{
            $error = $this->conn->errorInfo(); // 获取最后操作错误信息的数组
            var_dump($error);
        }
    }
    // 获取单条查询结果
    public function fetch($sql)
    {
        return $this->conn->query($sql)->fetch(PDO::FETCH_ASSOC);
    }
    // 获取多条查询结果
    public function fetchAll($sql)
    {
        return $this->conn->query($sql)->fetchAll(PDO::FETCH_ASSOC);
    }
}
?>

调用

Demo.php

<?php
/**
 * Db类测试
 */
require 'Db.php';
// 获取Db类实例
$db = Db::getInstance();
// 新增操作
// $sql = "INSERT student SET name='张一鸣',email='ByteDance@qq.com',grade='59',course='golang'";
// $db->exec($sql);
// echo '成功插入了'.$db->num.'条记录,主键id是'.$db->insertId;
// 删除操作
// $sql = "DELETE FROM student WHERE id='4'";
// $db->exec($sql);
// echo '成功删除了'.$db->num.'条记录';
// 更新操作
// $sql = "UPDATE student SET grade='1199' WHERE id='1'";
// $db->exec($sql);
// echo '成功更新了'.$db->num.'条记录';
// 查询单条操作
// $sql = "SELECT id,name,email,grade FROM student WHERE grade < '60'";
// $row = $db->fetch($sql);
// var_dump($row);
// // 查询多条操作
// $sql = "SELECT id,name,email,grade FROM student WHERE grade > '80'";
// $rows = $db->fetchAll($sql);
// var_dump($rows);
?>

数据库表格结构

SQL

全选下面的SQL语句粘贴至数据库管理工具的SQL执行框进行执行即可快速创建测试数据库。

-- phpMyAdmin SQL Dump
-- version 4.8.5
-- https://www.phpmyadmin.net/
--
-- 主机: localhost
-- 生成日期: 2022-08-08 10:46:35
-- 服务器版本: 5.7.26
-- PHP 版本: 7.3.4
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- 数据库: `edu`
--
-- --------------------------------------------------------
--
-- 表的结构 `student`
--
CREATE TABLE `student` (
  `id` int(11) NOT NULL,
  `name` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `email` text COLLATE utf8_unicode_ci NOT NULL,
  `grade` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `course` varchar(32) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- 转存表中的数据 `student`
--
INSERT INTO `student` (`id`, `name`, `email`, `grade`, `course`) VALUES
(1, '王兴', 'meituan@qq.com', '80', 'ruby'),
(2, '黄峥', 'pdd@qq.com', '68', 'mysql'),
(6, '李彦宏', 'baidu@qq.com', '95', 'python'),
(5, '马云', 'mayun@qq.com', '88', 'php'),
(7, '刘强东', 'jd@qq.com', '76', 'C++'),
(8, '马化腾', '10001@qq.com', '59', 'java'),
(9, '张一鸣', 'ByteDance@qq.com', '77', 'golang');
--
-- 转储表的索引
--
--
-- 表的索引 `student`
--
ALTER TABLE `student`
  ADD PRIMARY KEY (`id`);
--
-- 在导出的表使用AUTO_INCREMENT
--
--
-- 使用表AUTO_INCREMENT `student`
--
ALTER TABLE `student`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

到此这篇关于php实现pdo数据库操作类过程详解的文章就介绍到这了,更多相关php pdo数据库操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解析PHP中intval()等int转换时的意外异常情况

    解析PHP中intval()等int转换时的意外异常情况

    本篇文章是对PHP中intval()等int转换时的意外异常情况进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php统计文件大小,以GB、MB、KB、B输出

    php统计文件大小,以GB、MB、KB、B输出

    学习了fread读取命令,用到了filesize函数,知道这个函数定大有用到的时候,遂用之编写统计文件大小函数
    2011-05-05
  • php入门教程之Zend Studio设置与开发实例

    php入门教程之Zend Studio设置与开发实例

    这篇文章主要介绍了php入门教程之Zend Studio设置与开发,简单分析了Zend Studio模板的设置与php简单开发商品订单程序的技巧,需要的朋友可以参考下
    2016-09-09
  • php 中文字符入库或显示乱码问题的解决方法

    php 中文字符入库或显示乱码问题的解决方法

    这个的问题就出在在php里没有告诉mysql数据库你要插入的数据是gbk类型的,要解决其实很简单。连接数据库后加上这么一句话就OK了。
    2010-04-04
  • Windows服务器中PHP如何安装redis扩展

    Windows服务器中PHP如何安装redis扩展

    一句话总结:下载扩展的dll,放入指定文件夹(php对应的扩展的目录php/ext),在配置文件php.ini中注册dll,这里就为大家分享一下
    2019-09-09
  • PHP重定向与伪静态区别

    PHP重定向与伪静态区别

    伪静态是SEO重要的方法,通过重定向来实现,并且可以通过重定向来隐藏网站的技术,过滤异常访问。本课分为两部分,前半部分详细介绍Apache重定向的基础知识,后半部分通过多个实际案例再次加深对重定向的理解,并且会演示各种重定向设置后的实际效果。
    2017-02-02
  • 攻克CakePHP系列三 表单数据增删改

    攻克CakePHP系列三 表单数据增删改

    下面的代码是CakePHP下对表单数据的增加,删除,修改实现代码
    2008-10-10
  • php at(@)符号的用法简介

    php at(@)符号的用法简介

    对于php的初学者,经常会看到在一个函数名字前面有一个at(@)符号,但是不知道它的作用和用法,去掉后好像对程序没有什么影响,感到很困惑,简单的说@可以忽略错误,有仰制错误的功能为错误控制操作符.
    2009-07-07
  • 原生php实现excel文件读写的方法分析

    原生php实现excel文件读写的方法分析

    这篇文章主要介绍了原生php实现excel文件读写的方法,结合实例形式分析了采用原生php针对Excel进行读写操作的相关实现方法与操作注意事项,需要的朋友可以参考下
    2018-04-04
  • 解决php写入数据库乱码的问题

    解决php写入数据库乱码的问题

    在本文里小编给大家分享的是一篇关于解决php写入数据库乱码的问题的知识点内容,需要的朋友们可以学习下。
    2019-09-09

最新评论