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 相关文章推荐
php一句话cmdshell新型 (非一句话木马)
Apr 18 PHP
一个php导出oracle库的php代码
Apr 20 PHP
PHP学习 变量使用总结
Mar 24 PHP
php mail to 配置详解
Jan 16 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
Oct 29 PHP
php给图片加文字水印
Jul 31 PHP
php如何获取文件的扩展名
Oct 28 PHP
PHP对象实例化单例方法
Jan 19 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 PHP
PHP利用Socket获取网站的SSL证书与公钥
Jun 18 PHP
docker-compose部署php项目实例详解
Jul 30 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 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 保留字列表
2012/10/04 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
载入进度条 效果
2006/07/08 Javascript
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
canvas绘制环形进度条
2017/02/23 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
详解Python中heapq模块的用法
2016/06/28 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
python 标准差计算的实现(std)
2019/07/29 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
python模拟斗地主发牌
2020/04/22 Python
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
年终自我鉴定
2013/10/09 职场文书
经典洗发水广告词
2014/03/13 职场文书
完美的中文自荐信
2014/05/24 职场文书
学习考察心得体会
2014/09/04 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
体育委员竞选稿
2015/11/21 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
Python基础之数据类型知识汇总
2021/05/18 Python