PHP DB 数据库连接类定义与用法示例


Posted in PHP onMarch 11, 2019

本文实例讲述了PHP DB 数据库连接类定义与用法。分享给大家供大家参考,具体如下:

声明:

近期观看了一节 PHP 消息队列视频,对于讲师WiconWang提供的代码,在此分享一下,希望能对爱学习的小伙伴有所帮助…

<?php
// 数据库连接类
class DB{
 //私有的属性
 private static $dbcon=false;
 private $host;
 private $port;
 private $user;
 private $pass;
 private $db;
 private $charset;
 private $link;
 //私有的构造方法
 private function __construct(){
  $this->host = 'localhost';
  $this->port = '3306';
  $this->user = 'root';
  $this->pass = 'root';
  $this->db = 'imooc';
  $this->charset= 'utf8';
  //连接数据库
  $this->db_connect();
  //选择数据库
  $this->db_usedb();
  //设置字符集
  $this->db_charset();
  }
  //连接数据库
  private function db_connect(){
  $this->link=mysqli_connect($this->host.':'.$this->port,$this->user,$this->pass);
  if(!$this->link){
   echo "数据库连接失败<br>";
   echo "错误编码".mysqli_errno($this->link)."<br>";
   echo "错误信息".mysqli_error($this->link)."<br>";
   exit;
  }
  }
  //设置字符集
  private function db_charset(){
   mysqli_query($this->link,"set names {$this->charset}");
  }
  //选择数据库
  private function db_usedb(){
   mysqli_query($this->link,"use {$this->db}");
  }
  //私有的克隆
  private function __clone(){
   die('clone is not allowed');
  }
  //公用的静态方法
  public static function getIntance(){
   if(self::$dbcon==false){
   self::$dbcon=new self;
   }
   return self::$dbcon;
  }
  //执行sql语句的方法
  public function query($sql){
   $res=mysqli_query($this->link,$sql);
   if(!$res){
   echo "sql语句执行失败<br>";
   echo "错误编码是".mysqli_errno($this->link)."<br>";
   echo "错误信息是".mysqli_error($this->link)."<br>";
   }
   return $res;
  }
  //获得最后一条记录id
  public function getInsertid(){
   return mysqli_insert_id($this->link);
  }
  /**
  * 查询某个字段
  * @param
  * @return string or int
  */
  public function getOne($sql){
   $query=$this->query($sql);
   return mysqli_free_result($query);
  }
  //获取一行记录,return array 一维数组
  public function getRow($sql,$type="assoc"){
   $query=$this->query($sql);
   if(!in_array($type,array("assoc",'array',"row"))){
    die("mysqli_query error");
   }
   $funcname="mysqli_fetch_".$type;
   return $funcname($query);
  }
  //获取一条记录,前置条件通过资源获取一条记录
  public function getFormSource($query,$type="assoc"){
  if(!in_array($type,array("assoc","array","row")))
  {
   die("mysqli_query error");
  }
  $funcname="mysqli_fetch_".$type;
  return $funcname($query);
  }
  //获取多条数据,二维数组
  public function getAll($sql){
   $query=$this->query($sql);
   $list=array();
   while ($r=$this->getFormSource($query)) {
   $list[]=$r;
   }
   return $list;
  }
  public function selectAll($table,$where,$fields='*',$order='',$skip=0,$limit=1000)
  {
       if(is_array($where)){
          foreach ($where as $key => $val) {
            if (is_numeric($val)) {
              $condition = $key.'='.$val;
            }else{
              $condition = $key.'=\"'.$val.'\"';
            }
          }
       } else {
        $condition = $where;
       }
       if (!empty($order)) {
         $order = " order by ".$order;
       }
       $sql = "select $fields from $table where $condition $order limit $skip,$limit";
       $query = $this->query($sql);
       $list = array();
       while ($r= $this->getFormSource($query)) {
         $list[] = $r;
       }
       return $list;
  }
   /**
   * 定义添加数据的方法
   * @param string $table 表名
   * @param string orarray $data [数据]
   * @return int 最新添加的id
   */
   public function insert($table,$data){
   //遍历数组,得到每一个字段和字段的值
   $key_str='';
   $v_str='';
   foreach($data as $key=>$v){
   // if(empty($v)){
   //  die("error");
   // }
    //$key的值是每一个字段s一个字段所对应的值
    $key_str.=$key.',';
    $v_str.="'$v',";
   }
   $key_str=trim($key_str,',');
   $v_str=trim($v_str,',');
   //判断数据是否为空
   $sql="insert into $table ($key_str) values ($v_str)";
   $this->query($sql);
  //返回上一次增加操做产生ID值
   return $this->getInsertid();
  }
  /*
  * 删除一条数据方法
  * @param1 $table, $where=array('id'=>'1') 表名 条件
  * @return 受影响的行数
  */
  public function deleteOne($table, $where){
   if(is_array($where)){
    foreach ($where as $key => $val) {
     $condition = $key.'='.$val;
    }
   } else {
    $condition = $where;
   }
   $sql = "delete from $table where $condition";
   $this->query($sql);
   //返回受影响的行数
   return mysqli_affected_rows($this->link);
  }
  /*
  * 删除多条数据方法
  * @param1 $table, $where 表名 条件
  * @return 受影响的行数
  */
  public function deleteAll($table, $where){
   if(is_array($where)){
    foreach ($where as $key => $val) {
     if(is_array($val)){
      $condition = $key.' in ('.implode(',', $val) .')';
     } else {
      $condition = $key. '=' .$val;
     }
    }
   } else {
    $condition = $where;
   }
   $sql = "delete from $table where $condition";
   $this->query($sql);
   //返回受影响的行数
   return mysqli_affected_rows($this->link);
  }
  /**
  * [修改操作description]
  * @param [type] $table [表名]
  * @param [type] $data [数据]
  * @param [type] $where [条件]
  * @return [type]
  */
  public function update($table,$data,$where,$limit=0){
   //遍历数组,得到每一个字段和字段的值
   $str='';
  foreach($data as $key=>$v){
   $str.="$key='$v',";
  }
  $str=rtrim($str,',');
   if(is_array($where)){
    foreach ($where as $key => $val) {
     if(is_array($val)){
      $condition = $key.' in ('.implode(',', $val) .')';
     } else {
      $condition = $key. '=' .$val;
     }
    }
   } else {
    $condition = $where;
   }
    if (!empty($limit)) {
      $limit = " limit ".$limit;
    }else{
      $limit='';
    }
  //修改SQL语句
  $sql="update $table set $str where $condition $limit";
  $this->query($sql);
  //返回受影响的行数
  return mysqli_affected_rows($this->link);
  }
}
?>

使用方法

  • 对DB类中__construct()中的配置信息,进行符合自己数据库的修改
  • include 引入DB类
  • 使用DB类中的方法需要先进行实例化,以插入数据为例:
$db = DB::getIntance();
$insert_data = ['order_id'=>'10010','order_amount' = '200.00','status'=> 1];
$res = $db->insert('order_info',$insert_data);

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

PHP 相关文章推荐
Dedecms常用函数解析
Feb 01 PHP
php 从数据库提取二进制图片的处理代码
Sep 09 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
PHP flush()与ob_flush()的区别详解
Jun 03 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
php引用传值实例详解学习
Nov 06 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
php自定义类fsocket模拟post或get请求的方法
Jul 31 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
php中访问修饰符的知识点总结
Jan 27 PHP
php屏蔽错误及提示的方法
May 10 PHP
PHP实现获取文件mime类型多种方法解析
May 28 PHP
PHP实现的杨辉三角求解算法分析
Mar 11 #PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
Mar 11 #PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
Mar 11 #PHP
PHP join()函数用法与实例讲解
Mar 11 #PHP
PHP lcfirst()函数定义与用法
Mar 08 #PHP
浅谈PHPANALYSIS提取关键字
Mar 08 #PHP
PHP levenshtein()函数用法讲解
Mar 08 #PHP
You might like
同一空间绑定多个域名而实现访问不同页面的PHP代码
2006/12/06 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
详解Vue-cli代理解决跨域问题
2017/09/27 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
Python中的jquery PyQuery库使用小结
2014/05/13 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
Booking.com美国:全球酒店预订网站
2017/04/18 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
本科生求职简历的自我评价
2013/10/21 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
小学推普周活动总结
2015/05/07 职场文书
会计专业自荐信范文
2019/05/22 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
使用CSS实现音波加载效果
2023/05/07 HTML / CSS