PHP基于PDO封装简易MySQL操作类

竹里
竹里
发布时间:2026-10-13 | 4人浏览过
原创

介绍一个基于PHP PDO的MySQL简易操作类,涵盖建连、增删改查及分组查询等方法,提供完整的源码参考。

核心功能与目标

该 MySQL 操作类旨在简化 PHP 原生数据库交互流程。通过继承 PDO 类,封装了常见的 CRUD(创建、读取、更新、删除)操作。主要功能包括:

  • 自动连接:构造函数中初始化数据库连接并设置字符集。
  • 批量插入:insert 方法支持数组键值对自动拼接 SQL。
  • 条件查询:select 和 delete 支持字符串单条件或数组多条件组合。
  • 结果获取:提供单条字段提取、全表遍历及分组取值方法。

准备条件

  1. 确保 PHP 环境已开启 pdo_mysql 扩展。
  2. 准备好 MySQL 数据库的用户名、密码、主机地址及端口信息。
  3. 备份重要数据,此类涉及删除和覆盖操作,请谨慎使用。

代码实现结构

类名定义为 mysql,直接继承自 PDO。以下是完整源代码:

<?php
class mysql extends PDO{
  public $server;
  public $database;
  public $user;
  public $password;
  public $sql;

  // 构造函数:建立连接并设置编码
  public function __construct($server,$database,$user,$password,$port=3306){
    $this->server = $server;
    $this->database = $database;
    $this->user = $user;
    $this->password = $password;
    parent::__construct("mysql:host=$server;port=$port;dbname=$database",$user,$password);
    $this->query('SET NAMES utf8');
  }

  // 删除表操作
  public function drop($table){
    $sql = 'DROP TABLE '.$table.';';
    $re = $this->query($sql);
    if($re){
      return true;
    }else{
      return false;
    }
  }

  // 插入数据:支持数组参数或分隔符解析
  public function insert($table,$name,$value=null){
    $sql = "INSERT INTO ".$table.'(';
    if($value == null){
        $arrname = array_keys($name);
        $arrvalue = array_values($name);
    }else{
        $arrname = explode('|', $name);
        $arrvalue = explode('|', $value);
    }
    // 动态拼接字段名
    for($i=0;$i<count($arrname);$i++){
      if($i==count($arrname)-1){
        $sql = $sql.$arrname[$i];
      }else{
        $sql = $sql.$arrname[$i].",";
      }
    }
    $sql = $sql.")VALUES(";
    // 动态拼接字段值
    for($i=0;$i<count($arrvalue);$i++){
      if($i==count($arrvalue)-1){
        $sql = $sql."'".$arrvalue[$i]."'";
      }else{
        $sql = $sql."'".$arrvalue[$i]."',";
      }
    }
    $sql .=");";
    $re = $this->query($sql);
    if($re){
      return true;
    }else{
      return false;
    }
  }

  // 删除数据:支持单条件字符串或多条件数组
  public function delete($table,$Conditionsname,$Conditionsvalue=null){
    if($Conditionsvalue!=null){
      $sql = "DELETE FROM ".$table." WHERE ".$Conditionsname."='".$Conditionsvalue."';";
    }else{
      $sql = "DELETE FROM ".$table." WHERE ";
      $arrname = array_keys($Conditionsname);
      $arrvalue = array_values($Conditionsname);
      for($i=0;$i<count($arrname);$i++){
        if($i==count($arrname)-1){
          $sql.=$arrname[$i].'='."'".$arrvalue[$i]."'";
        }else{
          // 注意:此处逻辑可能存在语义歧义,通常多条件应用 AND 连接
          $sql.=$arrname[$i].'='."'".$arrvalue[$i]."',";
        }
      }
      $sql.=';';
    }
    $re = $this->query($sql);
    if($re){
      return true;
    }else{
      return false;
    }
  }

  // 查询数据:返回指定字段的单行值
  public function select($table,$name,$Conditionsname,$Conditionsvalue=null){
    if($Conditionsvalue!=null){
      $sql = "SELECT ".$name." FROM ".$table." WHERE ".$Conditionsname."='".$Conditionsvalue."';";
    }else{
      $sql = "SELECT ".$name." FROM ".$table." WHERE ";
      $arrname = array_keys($Conditionsname);
      $arrvalue = array_values($Conditionsname);
      for($i=0;$i<count($arrname);$i++){
        if($i==count($arrname)-1){
          $sql.=$arrname[$i].'='."'".$arrvalue[$i]."'";
        }else{
          $sql.=$arrname[$i].'='."'".$arrvalue[$i]."' and ";
        }
      }
      $sql.=';';
    }
    $re = $this->query($sql);
    $row = $re->fetch();
    return $row[$name];
  }

  // 更新数据
  public function update($table,$name,$value,$Conditionsname,$Conditionsvalue=null){
    if($Conditionsvalue!=null){
      $sql = "UPDATE ".$table." SET ".$name."= '".$value."' WHERE ".$Conditionsname."='".$Conditionsvalue."';";
    }else{
      $sql = "UPDATE ".$table." SET ".$name."= '".$value."' WHERE ";
      $arrname = array_keys($Conditionsname);
      $arrvalue = array_values($Conditionsname);
      for($i=0;$i<count($arrname);$i++){
        if($i==count($arrname)-1){
          $sql.=$arrname[$i].'='."'".$arrvalue[$i]."'";
        }else{
          $sql.=$arrname[$i].'='."'".$arrvalue[$i]."' and ";
        }
      }
      $sql.=';';
    }
    $re = $this->query($sql);
    if($re){
      return true;
    }else{
      return false;
    }
  }

  // 分组获取某字段所有值
  public function group($table,$name){
    $sql = "SELECT ".$name." FROM ".$table.";";
    $return = array();
    $re = $this->query($sql);
    while($row = $re->fetch(PDO::FETCH_ASSOC)){
      array_push($return,$row[$name]);
    }
    return $return;
  }

  // 执行任意SQL并返回关联数组结果集
  public function fetchall($sql){
    $return = array();
    $re = $this->query($sql);
    while($row = $re->fetch(PDO::FETCH_ASSOC)){
      array_push($return,$row);
    }
    return $return;
  }
}

关键方法使用说明

第1步:实例化数据库对象

入口为标准构造函数调用。需传入服务器地址、数据库名、用户名和密码。可选参数为端口,默认为 3306。

示例:$db = new mysql('localhost','test_db','root','pass123');

第2步:执行插入操作 (Insert)

入口为 insert(表名, 数据)。若 value 为 null,则 name 应为关联数组,自动提取 Key 作为字段名,Value 作为字段值。若提供了 value,则 name 和 value 均应以 | 分隔的字符串形式传入。

第3步:执行查询与更新 (Select & Update)

入口分别为 select() 和 update()。两者均支持两种模式:

  1. 单条件模式:直接传入条件字段名和值作为最后两个参数。
  2. 多条件模式:将条件字段和值分别放入数组/字符串,通过 and 连接(需注意 delete 方法中部分版本的拼接逻辑差异)。

第4步:处理结果集

使用 fetchall() 可执行自定义 SQL 语句并返回完整的关联数组列表。使用 group() 可快速获取指定表中某一列的所有值组成的数组。

完成判断与注意事项

  • 安全提示:此类直接拼接变量到 SQL 语句中,未使用预处理语句(Prepare),在高并发或不可信输入场景下存在 SQL 注入风险。建议仅在受控环境或内部工具中使用,生产环境请引入参数绑定。
  • 编码问题:构造函数硬编码了 SET NAMES utf8,若数据库使用 utf8mb4,需手动修改此处的字符串以支持Emoji等特殊字符。
  • 错误处理:当前实现仅返回布尔值,未抛出异常。若需调试,可在各方法中加入 echo $this->errorInfo(); 输出详细错误码。
以上就是基于PHP PDO实现的MySQL简易操作类的详细内容,更多关于PHP数据库开发资料的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表