php封装的mysqli类完整实例


Posted in PHP onOctober 18, 2016

本文实例讲述了php封装的mysqli类。分享给大家供大家参考,具体如下:

类:

<?php
header('content-type:text/html;charset=utf-8');
/*
掌握满足单例模式的必要条件
(1)私有的构造方法-为了防止在类外使用new关键字实例化对象
(2)私有的成员属性-为了防止在类外引入这个存放对象的属性
(3)私有的克隆方法-为了防止在类外通过clone成生另一个对象
(4)公有的静态方法-为了让用户进行实例化对象的操作
*/
class ConnectMysqli{
  //私有的属性
  private static $dbcon=false;
  private $host;
  private $port;
  private $user;
  private $pass;
  private $db;
  private $charset;
  private $link;
  //私有的构造方法
  private function __construct($config=array()){
    $this->host = $config['host'] ? $config['host'] : 'localhost';
    $this->port = $config['port'] ? $config['port'] : '3306';
    $this->user = $config['user'] ? $config['user'] : 'root';
    $this->pass = $config['pass'] ? $config['pass'] : 'root';
    $this->db = $config['db'] ? $config['db'] : 'small2';
    $this->charset=isset($arr['charset']) ? $arr['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;
   }
   //打印数据
    public function p($arr){
      echo "<pre>";
      print_r($arr);
      echo "</pre>";
    }
    public function v($arr){
    echo "<pre>";
      var_dump($arr);
      echo "</pre>";
    }
    //获得最后一条记录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;
    }
     /**
     * 定义添加数据的方法
     * @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){
     //遍历数组,得到每一个字段和字段的值
     $str='';
    foreach($data as $key=>$v){
     $str.="$key='$v',";
    }
    $str=rtrim($str,',');
    //修改SQL语句
    $sql="update $table set $str where $where";
    $this->query($sql);
    //返回受影响的行数
    return mysqli_affected_rows($this->link);
   }
}
?>

用法测试:

//mysqli测试
$db=ConnectMysqli::getIntance();
//var_dump($db);
/*$sql="select * from acticle";
$list=$db->getAll($sql);
$db->p($list);*/
/*$sql="select * from acticle where acticle_id=95";
$list=$db->getRow($sql);
$db->p($list);
*/
/*$sql="select title from acticle";
$list=$db->getOne($sql);
$db->p($list);不行*/
//$list=$db->insert("users",$_POST);
//$del=$db->deleteOne("users","id=29");
//$del=$db->deleteAll("users","id in(27,28)");
//$up=$db->update("users",$_POST,"id=27");
//print_R($list);

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

PHP 相关文章推荐
phpmyadmin操作流程
Oct 09 PHP
xajax写的留言本
Nov 25 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
Oct 23 PHP
php explode函数实例代码
Feb 27 PHP
Linux下实现PHP多进程的方法分享
Aug 16 PHP
phpize的深入理解
Jun 03 PHP
根据ip调用新浪api获取城市名并转成拼音
Mar 07 PHP
php商品对比功能代码分享
Sep 24 PHP
php生成curl命令行的方法
Dec 14 PHP
3种方法轻松处理php开发中emoji表情的问题
Jul 18 PHP
golang与PHP输出excel示例
Jul 22 PHP
php pdo连接数据库操作示例
Nov 18 PHP
PHP实现文件上传下载实例
Oct 18 #PHP
Yii实现文章列表置顶功能示例
Oct 18 #PHP
Yii统计不同类型邮箱数量的方法
Oct 18 #PHP
详解PHP归并排序的实现
Oct 18 #PHP
Yii框架中sphinx索引配置方法解析
Oct 18 #PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 #PHP
php文件上传、下载和删除示例
Aug 28 #PHP
You might like
PHP 日常开发小技巧
2009/09/23 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
谈谈impress.js初步理解
2015/09/09 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
2016/01/28 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
python list转dict示例分享
2014/01/28 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
2019/05/18 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
canvas线条的属性详解
2018/03/27 HTML / CSS
安德玛比利时官网:Under Armour比利时
2019/08/28 全球购物
毕业生自我鉴定实例
2014/01/21 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
Golang gRPC HTTP协议转换示例
2022/06/16 Golang