PHP简单数据库操作类实例【支持增删改查及链式操作】

yizhihongxing

下面是详细的攻略。

1. 简介

PHP 中操作数据库是一个常见的需求,但是重复写 相同的操作代码是一件很麻烦的事情。我们可以通过封装一个数据库操作类来解决这个问题。

这个数据库操作类提供增、删、改、查等基本的功能,并支持链式操作。

2. 实现

我们可以将这个操作类放在一个单独的文件中,比如 db.php

在该类中,我们需要定义连接数据库、增删改查等基本方法。对于增、删、改方法,我们可以使用预处理语句来避免 SQL 注入安全问题。

下面是示例代码:

<?php
class DB {
    private static $instance = null;
    private $pdo = null;
    private $table = null;

    private function __construct($host, $port, $dbname, $username, $password) {
        $dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=utf8mb4";
        $this->pdo = new PDO($dsn, $username, $password);
        $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    public static function getInstance($host, $port, $dbname, $username, $password) {
        if (self::$instance === null) {
            self::$instance = new DB($host, $port, $dbname, $username, $password);
        }
        return self::$instance;
    }

    public function table($table) {
        $this->table = $table;
        return $this;
    }

    public function insert($data) {
        $keys = array_keys($data);
        $placeholders = implode(',', array_fill(0, count($keys), '?'));
        $sql = "INSERT INTO $this->table (" . implode(',', $keys) . ") VALUES ($placeholders)";
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute(array_values($data));
        return $stmt->rowCount();
    }

    public function delete($condition, $params = array()) {
        $sql = "DELETE FROM $this->table WHERE $condition";
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($params);
        return $stmt->rowCount();
    }

    public function update($data, $condition, $params = array()) {
        $set = array();
        foreach ($data as $key => $value) {
            $set[] = "$key = ?";
        }
        $sql = "UPDATE $this->table SET " . implode(',', $set) . " WHERE $condition";
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute(array_merge(array_values($data), $params));
        return $stmt->rowCount();
    }

    public function select($columns = '*', $condition = '1', $params = array(), $orderBy = null, $limit = null) {
        $sql = "SELECT $columns FROM $this->table WHERE $condition";
        if ($orderBy !== null) {
            $sql .= " ORDER BY $orderBy";
        }
        if ($limit !== null) {
            $sql .= " LIMIT $limit";
        }
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($params);
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

这个类包含 getInstancetableinsertdeleteupdateselect 等方法。

其中,getInstance 为单例模式实现,确保只创建一个实例。

table 方法设置表名,返回 $this,从而实现链式调用。

insert 方法插入记录,参数为关联数组,数组的键为字段名,值为字段值。

delete 方法删除记录,其中 $condition 参数应该使用占位符,这里传入的 $params 数组为占位符的值。

update 方法更新记录,其中 $data 参数为要更新的值,也是一个关联数组;$condition 参数同样应该使用占位符。

select 方法查询记录,其中 $columns 是查询的列名;$condition 同样应该使用占位符;$params 为占位符的值;$orderBy 为排序条件,如果不需要排序,则传入 null$limit 为限制查询的数量,如果不需要限制,则传入 null

3. 示例

下面是两个示例,以更清晰地展示 DB 类的使用方法。

示例1

假设我们有一个 users 表,其中包含 user_idnameage 三个字段,现在需要向该表中插入一条记录。

$db = DB::getInstance('localhost', 3306, 'test', 'root', 'root');
$data = [
    'name' => 'Tom',
    'age' => 18,
];
$result = $db->table('users')->insert($data);

这里用 table 方法设置表名为 users,然后使用 insert 方法插入一条记录。最后 $result 数组应该包含一个键为 rowCount 的元素,其值为插入的记录数量。

示例2

现在我们要更新 users 表中 user_id 为 1 的记录中的 age 字段为 20。

$db = DB::getInstance('localhost', 3306, 'test', 'root', 'root');
$data = ['age' => 20];
$condition = 'user_id = ?';
$params = [1];
$result = $db->table('users')->update($data, $condition, $params);

这里用 table 方法设置表名为 users,然后使用 update 方法更新满足 $condition$params 的记录,在该例子中,将 user_id 为 1 的记录中的 age 字段更新为 20。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP简单数据库操作类实例【支持增删改查及链式操作】 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 关于二级目录拖拽排序的实现(源码示例下载)

    首先,需要先说明一下什么是二级目录拖拽排序。这是指在一个树形结构的目录中,除了根节点之外还有一层节点,这些节点是可以拖拽进行排序的。 在实现二级目录拖拽排序时,需要注意以下几点: 确定数据结构 需要确定存储每个节点数据的数据结构,常见的是使用树形结构(包含根节点和子节点)或者数组结构(将每个节点的父子关系以及排序位置都存储在一个数据对象中)。 使用拖拽事件 …

    PHP 2023年5月23日
    00
  • php计算十二星座的函数代码

    针对“php计算十二星座的函数代码”的问题,我可以提供以下完整攻略: 1. 星座计算原理 首先,我们需要了解一下星座计算的原理。一般来说,我们通过给定的出生日期,可以得到一个人的星座信息。具体计算方法如下: 首先,将出生日期按照年、月、日分别进行处理,得到对应的数值。 然后,根据星座的划分规则,计算出对应的起始日期和结束日期。 最后,将出生日期与起始日期和结…

    PHP 2023年5月26日
    00
  • 把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数

    将文本中的URL地址转换为可点击链接是很常见的需求,可以通过JavaScript或PHP中的自定义函数实现。 JavaScript实现方式 JavaScript中实现将文本中的URL转换为可点击链接,一般通过正则表达式匹配文本中的URL,并使用replace()函数进行替换。 以下是JavaScript实现的示例代码: function urlToLink(…

    PHP 2023年5月23日
    00
  • 使用phpstudy搭建gitee开源项目[勾股dev]

    前段时间公司一直要求进行只是梳理,整合,想着做一套知识管理系统,在gitee上找到了一个开源的项目管理系统,带的有知识库管理子系统,索性就拿来使用了; gitee地址   https://gitee.com/gouguopen/dev.git 【非广告推广】解决公司实际需要 我这个部署到本地了,使用集成开发环境phpstudy搭建, 环境要求使用: PHP …

    PHP 2023年4月18日
    00
  • PHP读取word文档的方法分析【基于COM组件】

    下面是针对“PHP读取word文档的方法分析【基于COM组件】”题目的完整攻略: 1. 前言 在进行本文内容学习之前,需要了解一些基本的知识点: PHP语言的基础知识; COM组件的概念、使用; HTML及CSS的基础知识。 2. 正文 2.1. 为何需要读取 Word 文档? 在实际的开发过程中,我们有时需要读取 Word 文档中的一些信息,比如说企业的合…

    PHP 2023年5月26日
    00
  • php数组合并与拆分实例分析

    PHP数组合并与拆分实例分析 在 PHP 中,数组是一种非常常用的数据结构。在实际开发中,我们可能需要合并若干个数组或者将一个数组拆分成若干个小数组。本文将详细介绍 PHP 中如何实现数组的合并与拆分操作,并提供两个实例说明。 数组合并 PHP 提供了多种合并数组的方法,主要有以下几种方式: 1. array_merge 函数 array_merge 函数可…

    PHP 2023年5月26日
    00
  • PHP中的替代语法简介

    关于“PHP中的替代语法简介”的详细讲解,可以分为以下几个方面来讲解。 什么是PHP中的替代语法 在PHP中,可以使用替代语法来简化代码的书写。替代语法和常规语法本质上是相同的,只是在某些方面写法略有不同。常规语法中的大括号({ })用于标记代码块的开始和结束,而替代语法使用冒号(:)和关键字endif、endwhile和endforeach等来标记代码块的…

    PHP 2023年5月23日
    00
  • php匹配字符中链接地址的方法

    当我们需要从一段字符串中匹配出所有链接地址时,可以使用PHP正则表达式来实现。以下是具体步骤: 1.使用preg_match_all()函数进行字符串匹配,它返回一个包含所有匹配结果的数组。 2.所需的正则表达式可以使用已知的链接地址末端(.com、.cn等)或url特征(以http或www开头)来构建。可以使用以下正则表达式: $pattern = &qu…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部