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+MYSQL 出现乱码的解决方法
Aug 08 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
Nov 10 PHP
PHP写的求多项式导数的函数代码
Jul 04 PHP
php排序算法(冒泡排序,快速排序)
Oct 09 PHP
thinkphp3.0 模板中函数的使用
Nov 13 PHP
php中使用redis队列操作实例代码
Feb 07 PHP
PHP远程采集图片详细教程
Jul 01 PHP
php判断当前操作系统类型
Oct 28 PHP
PHP 实现手机端APP支付宝支付功能
Jun 07 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
php设计模式之装饰模式应用案例详解
Jun 17 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 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一些公用函数的集合
2008/03/27 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
JavaScript 加号(+)运算符号
2009/12/06 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
angular动态表单制作
2018/02/23 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
详解Django中的权限和组以及消息
2015/07/23 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
Python如何通过subprocess调用adb命令详解
2017/08/27 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
Python线程同步的实现代码
2018/10/03 Python
python用插值法绘制平滑曲线
2021/02/19 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
python识别验证码的思路及解决方案
2020/09/13 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
个人实用的自我评价范文
2013/11/23 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis