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将数组转换成csv格式文件输出的方法

    下面是将PHP数组转换成CSV格式文件输出的方法: 1. 使用fputcsv()函数实现 <?php // 定义数据数组 $data = array( array(‘name’, ‘age’, ’email’), array(‘Tom’, 20, ‘tom@example.com’), array(‘Jack’, 25, ‘jack@example.c…

    PHP 2023年5月26日
    00
  • PHP中常用的魔术方法总结

    作为PHP开发者,我们经常会接触到一些魔术方法,这些魔术方法可以帮助我们更好地完成工作。下面是关于PHP中常用的魔术方法的总结: 什么是魔术方法 魔术方法是一种特殊的方法,可以被PHP中的类自动调用。这些方法都以两个下划线开始和结束,例如 __construct() 和 __get() 等。 在 PHP 代码中,通过魔术方法,你可以在某个事件发生时,自动预定…

    PHP 2023年5月25日
    00
  • PHP实现的简单AES加密解密算法实例

    下面是对于“PHP实现的简单AES加密解密算法实例”的完整攻略,主要包括以下几个部分: 材料准备 算法实现 示例说明 1. 材料准备 在开始实现之前,需要确保已经安装好了 PHP 环境,并且可以使用 PHP 命令行工具进行脚本测试。 此外,我们还需要依赖一个 OpenSSL 扩展库,因此需要使用命令安装 OpenSSL 扩展库: $ sudo apt-get…

    PHP 2023年5月26日
    00
  • 微信小程序技巧之show内容展示,上传文件编码问题

    下面是关于微信小程序技巧之show内容展示,上传文件编码问题的完整攻略: 1. show内容展示技巧 在微信小程序中展示内容,有时需要对特殊字符进行转义,以免出现展示错误或安全漏洞。Markdown 是一种轻量级的标记语言,它的标记符号相对简单,便于转义。这里我们分享几个小技巧: 1.1 使用 替代空格 在转义Markdown时,空格可能会被过滤掉…

    PHP 2023年5月23日
    00
  • Linux安装PHP8 新版笔记

    PHP部分   官网下载地址:https://www.php.net/downloads.php   我下载的是此时的最新稳定版8.2.3 cd /usr/localwget https://www.php.net/distributions/php-8.2.3.tar.gz   解压 tar -zxvf php-8.2.3.tar.gz   安装一些必要依…

    PHP 2023年4月17日
    00
  • PHP安装问题

    PHP安装问题攻略 步骤1:下载安装包 首先在PHP官方网站https://www.php.net/downloads.php,下载适合自己系统版本的PHP安装包,根据自己的服务器环境选择不同的版本。 示例:如果你正在使用Windows操作系统,需要下载Windows PHP安装包,选择版本号为7.4.1的安装包: https://windows.php.n…

    PHP 2023年5月24日
    00
  • php 使用fopen函数创建、打开文件详解及实例代码

    PHP使用fopen函数创建、打开文件详解及实例代码 简介 PHP中的fopen()函数用于创建、打开文件,并返回一个文件指针。这个文件指针可以用于读写文件内容。 语法 fopen ( string $文件名 , string $打开模式 [, bool $使用包含路径的安全检查 ] ) 参数 描述 string $文件名 必须。较为文件名的字符串。 str…

    PHP 2023年5月26日
    00
  • 微信小程序如何使用Promise对wx.request()封装详解(附完整代码)

    请看以下内容。 微信小程序如何使用Promise对wx.request()封装详解 在微信小程序中,我们经常会使用到网络请求,如调用微信的APIwx.request()来获取接口数据。但是wx.request()并没有返回Promise,如果需要使用Promise的话,就需要对其进行封装。 Promise概念简介 在这里简要介绍一下Promise的概念:Pr…

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