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

下面是详细的攻略。

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函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明 在PHP的函数库中,提供了多个函数用于进行不同进制间的转换。掌握这些函数可以帮助我们更方便快捷地进行数值转换。 十进制转换为其它进制 十进制转二进制 使用PHP中的decbin函数可以将十进制数转换为二进制数。该函数接受一个十进制数字作为参数,并返回一个对应的二进制字符串。 $num = 10; …

    PHP 2023年5月26日
    00
  • PHP简单判断iPhone、iPad、Android及PC设备的方法

    这里是“PHP简单判断iPhone、iPad、Android及PC设备的方法”的完整攻略。 标题:PHP简单判断iPhone、iPad、Android及PC设备的方法 在开发 Web 应用程序时,经常会需要根据不同的设备类型来显示不同的界面或提供不同的功能。本文将介绍如何使用 PHP 简单判断 iPhone、iPad、Android 及 PC 设备,以及如何…

    PHP 2023年5月26日
    00
  • [FAQ]PHP中的一些常识:类篇

    [FAQ]PHP中的一些常识:类篇 一、类在PHP中是什么? 在PHP中,类是一种面向对象编程的基本概念,是对事物的抽象和封装,这些事物可以是现实中存在的实体、数据、功能或概念,也可以是计算机程序中的数据和功能。 类定义了一组属性(数据)和方法(功能),被称为类的成员,类的实例化对象就是使用类定义中提供的成员来访问这些属性和方法。 二、如何定义一个类? 定义…

    PHP 2023年5月23日
    00
  • typecho统计博客所有文章的字数实例详解

    以下是“Typecho统计博客所有文章的字数实例详解”的完整使用攻略,包括获取文章列表、统计文章字数等内容。 获取文章列表 要统计Typecho博客所有文章的字数,您需要首先获取文章列表。您可以使用Typecho提供的Widget_Archive类来获取文章列表。以下是一个示例,演示如何使用Widget_Archive类来获取文章列表: $posts = T…

    PHP 2023年5月12日
    00
  • PHP回调函数与匿名函数实例详解

    PHP回调函数与匿名函数实例详解 在PHP中,回调函数和匿名函数(闭包)是非常有用的编程概念。回调函数是指在调用函数时作为参数传递给另一个函数的函数,而匿名函数则是在运行时定义的没有指定名称的函数。这两个概念在解决许多编程问题上都非常有用,本文将详细介绍这两个概念的用法。 回调函数 回调函数是将一个函数传递给另一个函数,并将其作为参数使用的函数。这使得代码可…

    PHP 2023年5月25日
    00
  • PHP正则表达式处理函数(PCRE 函数)实例小结

    下面我就来详细讲解一下“PHP正则表达式处理函数(PCRE 函数)实例小结”的完整攻略。 什么是PCRE PCRE全称为Perl Compatible Regular Expressions,是一套Perl风格的正则表达式,被广泛应用在各种编程语言中,包括PHP。PCRE提供了一系列函数,用于对字符串进行正则表达式匹配、替换等操作。 PCRE函数 PCRE函…

    PHP 2023年5月26日
    00
  • 在Django的View中使用asyncio的方法

    使用异步编程框架asyncio,可以让我们在Django的View中实现异步处理请求的功能,提高网站的并发处理能力和性能。下面是实现该功能的详细攻略。 1. 安装所需的库 pip install Django pip install aiohttp pip install uvloop aiohttp提供了类似requests的接口来发送异步请求,uvloo…

    PHP 2023年5月27日
    00
  • 浅谈PHP设计模式的桥接模式

    简介: 桥接模式又叫桥梁模式,属于结构型模式。目的是将抽象与实现分离,使它们都可以独立的变化,解耦。继承有很多好处,但是会增加耦合,而桥接模式偏向组合和聚合的方式来共享。 适用场景: 不希望或不适用使用多继承的场景。一个类存在2个或更多的 独立变化维度 , 并且这些维度都需要 独立扩展 优点: 解耦抽象和具体实现,方便增加抽象和实现。优秀的扩充能力符合开闭原…

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