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 相关文章推荐
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
php中在PDO中使用事务(Transaction)
May 14 PHP
php数组函数序列之array_search()- 按元素值返回键名
Nov 04 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
Jun 17 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
PHP实现的曲线统计图表示例
Nov 10 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
PHP有序表查找之二分查找(折半查找)算法示例
Feb 09 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
Oct 11 PHP
laravel添加角色和模糊搜索功能的实现代码
Jun 22 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实现框架(二)
2006/10/09 PHP
php access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
jquery 指南/入门基础
2007/11/30 Javascript
jquery 笔记 事件
2011/11/02 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
json定义及jquery操作json的方法
2016/09/29 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
Django与JS交互的示例代码
2017/08/23 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
python环境下安装opencv库的方法
2020/03/05 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
AJAX的全称是什么
2012/11/06 面试题
社区两委对照检查材料
2014/08/23 职场文书
厨师长岗位职责范本
2014/08/25 职场文书
经费申请报告
2015/05/15 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis