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

     更新时间:2019年03月11日 12:03:04   作者:moTzxx   我要评论

    这篇文章主要介绍了PHP DB 数据库连接类定义与用法,涉及php基于mysqli针对数据库的连接、增删改查等常见操作封装与使用技巧,需要的朋友可以参考下

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

    声明:

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

    <?php
    // 数据库连接类
    class DB{
     //?#25509;?#30340;属性
     private static $dbcon=false;
     private $host;
     private $port;
     private $user;
     private $pass;
     private $db;
     private $charset;
     private $link;
     //?#25509;?#30340;构造方法
     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}");
      }
      //?#25509;?#30340;克隆
      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相关内容?#34892;?#36259;的读者可查看本站专题:《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

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

    相关文章

  2. php curl获取网页内容(IPV6下超时)的解决办法

    php curl获取网页内容(IPV6下超时)的解决办法

    如果开启了IPv6,curl默认会优先解析 IPv6,在对应域名没有 IPv6 的情况下,会等待 IPv6 dns解析失败 timeout 之后才按以前的正常流程去找 IPv4
    2013-07-07
  3. iis6手工创建网站后无法运行php脚本的解决方法

    iis6手工创建网站后无法运行php脚本的解决方法

    下面小编就为大家带来一篇iis6手工创建网站后无法运行php脚本的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  4. PHP实现多图上传(结合uploadify插件)思路分析

    PHP实现多图上传(结合uploadify插件)思路分析

    这篇文章主要介绍了PHP实现多图上传的方法,实例分析了php结合uploadify插件实现多图上传的具体步骤与相关操作技巧,需要的朋友可以参考下
    2016-11-11
  5. 最新评论

    常用在线小工具

    山东群英会开奖查询