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图片验证码代码
Mar 27 PHP
用PHP读取RSS feed的代码
Aug 01 PHP
php xml-rpc远程调用
Dec 19 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
Oct 13 PHP
php 按指定元素值去除数组元素的实现方法
Nov 04 PHP
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
PHP微框架Dispatch简介
Jun 12 PHP
php实现的日历程序
Jun 18 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
微信支付之JSAPI公众号支付详解
May 15 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 PHP
php实现断点续传大文件示例代码
Jun 19 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
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
php图片裁剪函数
2018/10/31 PHP
Javascript 汉字字节判断
2009/08/01 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
2014/09/01 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
Python编程实现的图片识别功能示例
2017/08/03 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
python自动识别文本编码格式代码
2019/12/26 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
超级实用的8个Python列表技巧
2020/08/24 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
2020/12/13 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
Servlet的生命周期
2013/08/25 面试题
毕业生个人投资创业计划书
2014/01/04 职场文书
开学典礼策划方案
2014/05/28 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
幼儿教师小班个人总结
2015/02/05 职场文书
校运会宣传稿大全
2015/07/23 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
html form表单基础入门案例讲解
2021/07/21 HTML / CSS
python Tkinter模块使用方法详解
2022/04/07 Python