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 相关文章推荐
PHP5中的this,self和parent关键字详解教程
Mar 19 PHP
PHP 数组教程 定义数组
Oct 23 PHP
php Smarty初体验二 获取配置信息
Aug 08 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
php判断文件夹是否存在不存在则创建
Apr 09 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
php+js实现百度地图多点标注的方法
Nov 30 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
PHP中实现中文字串截取无乱码的解决方法
May 29 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 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多用户计数器代码
2007/03/11 PHP
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
php实现的日历程序
2015/06/18 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
php json转换相关知识(小结)
2018/12/21 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
传智播客学习之java 反射
2009/11/22 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
python实现simhash算法实例
2014/04/25 Python
python实现文本去重且不打乱原本顺序
2016/01/26 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
django将数组传递给前台模板的方法
2019/08/06 Python
通过python3实现投票功能代码实例
2019/09/26 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
中专生学习生活的自我评价分享
2013/10/27 职场文书
毕业生找工作的求职信范文
2013/12/24 职场文书
八年级美术教学反思
2014/02/02 职场文书
拔河比赛口号
2014/06/10 职场文书
大学生职业生涯规划大赛作品(精品)
2014/09/17 职场文书
小学生成绩单评语
2014/12/31 职场文书
辞职信标准格式
2015/02/27 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书