PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例


Posted in PHP onMay 08, 2019

本文实例讲述了PHP封装类似thinkphp连贯操作数据库Db类与简单应用。分享给大家供大家参考,具体如下:

<?php
header("Content-Type:text/html;charset=utf-8");
/**
 *php操作mysql的工具类
 */
class Db{
  private $_db = null;//数据库连接句柄
  private $_table = null;//表名
  private $_where = null;//where条件
  private $_order = null;//order排序
  private $_limit = null;//limit限定查询
  private $_group = null;//group分组
  private $_configs = array(
        'hostname' => 'localhost',
        'dbname'  => 'test',
        'username' => 'root',
        'password' => '1234'
      );//数据库配置
  /**
   * 构造函数,连接数据库
   */
  public function __construct(){
    $link = $this->_db;
    if(!$link){
      $db = mysqli_connect($this->_configs['hostname'],$this->_configs['username'],$this->_configs['password'],$this->_configs['dbname']);
      mysqli_query($db,"set names utf8");
      if(!$db){
        $this->ShowException("错误信息".mysqli_connect_error());
      }
      $this->_db = $db;
    }
  }
  /**
   * 获取所有数据
   *
   * @param   <type>  $table The table
   *
   * @return   boolean All.
   */
  public function getAll($table=null){
    $link = $this->_db;
    if(!$link)return false;
    $sql = "SELECT * FROM {$table}";
    $data = mysqli_fetch_all($this->execute($sql));
    return $data;
  }
  public function table($table){
    $this->_table = $table;
    return $this;
  }
  /**
   * 实现查询操作
   *
   * @param   string  $fields The fields
   *
   * @return   boolean ( description_of_the_return_value )
   */
  public function select($fields="*"){
    $fieldsStr = '';
    $link = $this->_db;
    if(!$link)return false;
    if(is_array($fields)){
      $fieldsStr = implode(',', $fields);
    }elseif(is_string($fields)&&!empty($fields)){
      $fieldsStr = $fields;
    }
    $sql = "SELECT {$fields} FROM {$this->_table} {$this->_where} {$this->_order} {$this->_limit}";
    $data = mysqli_fetch_all($this->execute($sql));
    return $data;
  }
  /**
   * order排序
   *
   * @param   string  $order The order
   *
   * @return   boolean ( description_of_the_return_value )
   */
  public function order($order=''){
    $orderStr = '';
    $link = $this->_db;
    if(!$link)return false;
    if(is_string($order)&&!empty($order)){
      $orderStr = "ORDER BY ".$order;
    }
    $this->_order = $orderStr;
    return $this;
  }
  /**
   * where条件
   *
   * @param   string $where The where
   *
   * @return   <type> ( description_of_the_return_value )
   */
  public function where($where=''){
    $whereStr = '';
    $link = $this->_db;
    if(!$link)return $link;
    if(is_array($where)){
      foreach ($where as $key => $value) {
        if($value == end($where)){
          $whereStr .= "`".$key."` = '".$value."'";
        }else{
          $whereStr .= "`".$key."` = '".$value."' AND ";
        }
      }
      $whereStr = "WHERE ".$whereStr;
    }elseif(is_string($where)&&!empty($where)){
      $whereStr = "WHERE ".$where;
    }
    $this->_where = $whereStr;
    return $this;
  }
  /**
   * group分组
   *
   * @param   string  $group The group
   *
   * @return   boolean ( description_of_the_return_value )
   */
  public function group($group=''){
    $groupStr = '';
    $link = $this->_db;
    if(!$link)return false;
    if(is_array($group)){
      $groupStr = "GROUP BY ".implode(',',$group);
    }elseif(is_string($group)&&!empty($group)){
      $groupStr = "GROUP BY ".$group;
    }
    $this->_group = $groupStr;
    return $this;
  }
  /**
   * limit限定查询
   *
   * @param   string $limit The limit
   *
   * @return   <type> ( description_of_the_return_value )
   */
  public function limit($limit=''){
    $limitStr = '';
    $link = $this->_db;
    if(!$link)return $link;
    if(is_string($limit)||!empty($limit)){
      $limitStr = "LIMIT ".$limit;
    }elseif(is_numeric($limit)){
      $limitStr = "LIMIT ".$limit;
    }
    $this->_limit = $limitStr;
    return $this;
  }
  /**
   * 执行sql语句
   *
   * @param   <type>  $sql  The sql
   *
   * @return   boolean ( description_of_the_return_value )
   */
  public function execute($sql=null){
    $link = $this->_db;
    if(!$link)return false;
    $res = mysqli_query($this->_db,$sql);
    if(!$res){
      $errors = mysqli_error_list($this->_db);
      $this->ShowException("报错啦!<br/>错误号:".$errors[0]['errno']."<br/>SQL错误状态:".$errors[0]['sqlstate']."<br/>错误信息:".$errors[0]['error']);
      die();
    }
    return $res;
  }
  /**
   * 插入数据
   *
   * @param   <type>  $data  The data
   *
   * @return   boolean ( description_of_the_return_value )
   */
  public function insert($data){
    $link = $this->_db;
    if(!$link)return false;
    if(is_array($data)){
      $keys = '';
      $values = '';
      foreach ($data as $key => $value) {
        $keys .= "`".$key."`,";
        $values .= "'".$value."',";
      }
      $keys = rtrim($keys,',');
      $values = rtrim($values,',');
    }
    $sql = "INSERT INTO `{$this->_table}`({$keys}) VALUES({$values})";
    mysqli_query($this->_db,$sql);
    $insertId = mysqli_insert_id($this->_db);
    return $insertId;
  }
  /**
   * 更新数据
   *
   * @param   <type> $data  The data
   *
   * @return   <type> ( description_of_the_return_value )
   */
  public function update($data){
    $link = $this->_db;
    if(!$link)return $link;
    if(is_array($data)){
      $dataStr = '';
      foreach ($data as $key => $value) {
        $dataStr .= "`".$key."`='".$value."',";
      }
      $dataStr = rtrim($dataStr,',');
    }
    $sql = "UPDATE `{$this->_table}` SET {$dataStr} {$this->_where} {$this->_order} {$this->_limit}";
    $res = $this->execute($sql);
    return $res;
  }
  /**
   * 删除数据
   *
   * @return   <type> ( description_of_the_return_value )
   */
  public function delete(){
    $link = $this->_db;
    if(!$link)return $link;
    $sql = "DELETE FROM `{$this->_table}` {$this->_where}";
    $res = $this->execute($sql);
    return $res;
  }
  /**
   * 异常信息输出
   *
   * @param   <type> $var  The variable
   */
  private function ShowException($var){
    if(is_bool($var)){
      var_dump($var);
    }else if(is_null($var)){
      var_dump(NULL);
    }else{
      echo "<pre style='position:relative;z-index:1000;padding:10px;border-radius:5px;background:#F5F5F5;border:1px solid #aaa;font-size:14px;line-height:18px;opacity:0.9;'>".print_r($var,true)."</pre>";
    }
  }
}
$db = new Db();
//查询操作
var_dump($db->table('user')->where('id > 2')->order('id desc')->limit('2,4')->select());
//插入操作
var_dump($db->table('user')->insert(array('username'=>'user','password'=>'pwd')));
//更新操作
var_dump($db->table('user')->where('id = 1')->update(array('username'=>'user1','password'=>'pwd1')));
//删除操作
var_dump($db->table('user')->where('id = 1')->delete());

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
利用PHP实现与ASP Banner组件相似的类
Oct 09 PHP
用PHP制作的意见反馈表源码
Mar 11 PHP
PHP 数组实例说明
Aug 18 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
Aug 01 PHP
php统计时间和内存使用情况示例分享
Mar 13 PHP
php 批量添加多行文本框textarea一行一个
Jun 03 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 PHP
ThinkPHP框架实现FTP图片上传功能示例
Apr 08 PHP
PHP进阶学习之Geo的地图定位算法详解
Jun 19 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 #PHP
Laravel框架查询构造器简单示例
May 08 #PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 08 #PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 #PHP
Laravel框架模型的创建及模型对数据操作示例
May 07 #PHP
Laravel框架路由管理简单示例
May 07 #PHP
Laravel框架实现简单的学生信息管理平台案例
May 07 #PHP
You might like
PHP的拦截器实例分析
2014/11/03 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
php设计模式之委托模式
2016/02/13 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
php使用pecl方式安装扩展操作示例
2019/08/12 PHP
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
python3.5绘制随机漫步图
2018/08/27 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
python+logging+yaml实现日志分割
2019/07/22 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
英国最大的香水商店:The Fragrance Shop
2018/07/06 全球购物
幼儿园家长寄语
2014/04/02 职场文书
党建工作先进材料
2014/05/02 职场文书
商铺消防安全责任书
2014/07/29 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技