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源代码
Oct 09 PHP
用PHP解决的一个栈的面试题
Jul 02 PHP
Fedora下安装php Redis扩展笔记
Sep 03 PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
Sep 20 PHP
PHP比较运算符的详细介绍
Sep 29 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
PHP入门教程之表单与验证实例详解
Sep 11 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
PHP实现微信提现功能
Sep 30 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 PHP
Thinkphp极验滑动验证码实现步骤解析
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
用文本文件制作留言板提示(下)
2006/10/09 PHP
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
解析javascript 实用函数的使用详解
2013/05/10 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
javascript标准库(js的标准内置对象)总结
2018/05/26 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
Python with用法实例
2015/04/14 Python
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
Python 在局部变量域中执行代码
2020/08/07 Python
企业管理部经理岗位职责
2013/12/24 职场文书
商场中秋节广播稿
2014/01/17 职场文书
总经理助理职责
2014/02/04 职场文书
活动总结怎么写啊
2014/05/07 职场文书
工作推荐信范文
2014/05/10 职场文书
优秀团员自我评价
2015/03/10 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书