php基于单例模式封装mysql类完整实例


Posted in PHP onOctober 18, 2016

本文实例讲述了php基于单例模式封装mysql类。分享给大家供大家参考,具体如下:

类:

<?php
header("content-type:text/html;charset=utf-8");
//封装一个类
/*
掌握满足单例模式的必要条件
(1)私有的构造方法-为了防止在类外使用new关键字实例化对象
(2)私有的成员属性-为了防止在类外引入这个存放对象的属性
(3)私有的克隆方法-为了防止在类外通过clone成生另一个对象
(4)公有的静态方法-为了让用户进行实例化对象的操作
*/
class db{
  //三私一共
  //私有的静态属性
  private static $dbcon=false;
  //私有的构造方法
  private function __construct(){
  $dbcon=@mysql_connect("localhost","root","root");
   mysql_select_db("small2",$dbcon) or die("mysql_connect error");
   mysql_query("set names utf8");
  }
  //私有的克隆方法
  private function __clone(){}
  //公用的静态方法
  public static function getIntance(){
   if(self::$dbcon==false){
    self::$dbcon=new self;
   }
   return self::$dbcon;
  }
  //打印数据
  public function p($arr){
    echo "<pre>";
    print_r($arr);
    echo "</pre>";
  }
  public function v($arr){
  echo "<pre>";
    var_dump($arr);
    echo "</pre>";
  }
  //执行语句
  public function query($sql){
  $query=mysql_query($sql);
   return $query;
  }
  /**
  * 查询某个字段
  * @param
  * @return string or int
  */
  public function getOne($sql){
   $query=$this->query($sql);
    return mysql_result($query,0);
  }
  //获取一行记录,return array 一维数组
  public function getRow($sql,$type="assoc"){
   $query=$this->query($sql);
   if(!in_array($type,array("assoc",'array',"row"))){
     die("mysql_query error");
   }
   $funcname="mysql_fetch_".$type;
   return $funcname($query);
  }
  //获取一条记录,前置条件通过资源获取一条记录
  public function getFormSource($query,$type="assoc"){
  if(!in_array($type,array("assoc","array","row")))
  {
    die("mysql_query error");
  }
  $funcname="mysql_fetch_".$type;
  return $funcname($query);
  }
  //获取多条数据,二维数组
  public function getAll($sql){
   $query=$this->query($sql);
   $list=array();
   while ($r=$this->getFormSource($query)) {
    $list[]=$r;
   }
   return $list;
  }
  //获得最后一条记录id
  public function getInsertid(){
   return mysql_insert_id();
  }
   /**
   * 定义添加数据的方法
   * @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 mysql_insert_id();
 }
 /*
  * 删除一条数据方法
  * @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 mysql_affected_rows();
  }
  /*
  * 删除多条数据方法
  * @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 mysql_affected_rows();
  }
 /**
  * [修改操作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 mysql_affected_rows();
 }
}
?>

测试:

//mysql测试
//$db=db::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=26");
//$del=$db->deleteAll("users","id in(23,24)");
//$up=$db->update("users",$_POST,"id=27");
//$id=$db->getInsertid();
//print_R($id);

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

PHP 相关文章推荐
php获得文件扩展名三法
Nov 25 PHP
dedecms模版制作使用方法
Apr 03 PHP
PHP 时间转换Unix时间戳代码
Jan 22 PHP
PHP 防注入函数(格式化数据)
Aug 08 PHP
选择PHP作为网站开发语言的原因分享
Jan 03 PHP
php预定义变量使用帮助(带实例)
Oct 30 PHP
php中mkdir函数用法实例分析
Nov 15 PHP
php三元运算符知识汇总
Jul 02 PHP
PHP创建word文档的方法(平台无关)
Mar 29 PHP
php接口技术实例详解
Dec 07 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
Nov 10 PHP
php封装的mysqli类完整实例
Oct 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
You might like
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
最令PHP初学者头痛的十四个问题
2006/07/12 PHP
PHP实现ftp上传文件示例
2014/08/21 PHP
php 可变函数使用小结
2018/06/12 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
用javascript控制iframe滚动的代码
2007/04/10 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
python 对key为时间的dict排序方法
2018/10/17 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
金讯Java笔试题目
2013/06/18 面试题
大学班长的职责
2014/01/27 职场文书
学习交流会主持词
2014/04/01 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
授权委托书协议书
2014/10/16 职场文书
教师个人教学总结
2015/02/11 职场文书
美容院员工规章制度
2015/08/05 职场文书
话题作文之财富(600字)
2019/12/03 职场文书