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 相关文章推荐
第九节 绑定 [9]
Oct 09 PHP
用PHP发电子邮件
Oct 09 PHP
PHP教程 预定义变量
Oct 23 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
Jun 28 PHP
php查找任何页面上的所有链接的方法
Dec 03 PHP
php页码形式分页函数支持静态化地址及ajax分页
Mar 28 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 PHP
laravel 如何实现引入自己的函数或类库
Oct 15 PHP
Yii框架自定义数据库操作组件示例
Nov 11 PHP
php实现自动生成验证码的实例讲解
Nov 17 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实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
Symfony核心类概述
2016/03/17 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
番茄的表单验证类代码修改版
2008/07/18 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
js 链式延迟执行DOME
2012/01/04 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
2013/03/04 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
Python使用urllib2获取网络资源实例讲解
2013/12/02 Python
Python深入学习之特殊方法与多范式
2014/08/31 Python
python分割文件的常用方法
2014/11/01 Python
python有几个版本
2020/06/17 Python
美国高街时尚品牌:OASAP
2016/07/24 全球购物
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
DOM和JQuery对象有什么区别
2016/11/11 面试题
应聘美工求职信
2013/11/07 职场文书
人事部专员岗位职责
2014/03/04 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
护士自我鉴定总结
2014/03/24 职场文书
企业年会主持词
2014/03/27 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB
java中如何截取字符串最后一位
2022/07/07 Java/Android