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 相关文章推荐
第六节 访问属性和方法 [6]
Oct 09 PHP
PHP制作图型计数器的例子
Oct 09 PHP
PHP 动态随机生成验证码类代码
Apr 09 PHP
php对图像的各种处理函数代码小结
Jul 08 PHP
PHP中的命名空间相关概念浅析
Jan 22 PHP
四种php中webservice实现的简单架构方法及实例
Feb 03 PHP
PHP实现简单的新闻发布系统实例
Jul 28 PHP
php搜索文件程序分享
Oct 30 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 PHP
php自定义函数实现统计中文字符串长度的方法小结
Apr 15 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 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
动态新闻发布的实现及其技巧
2006/10/09 PHP
php基础知识:函数基础知识
2006/12/13 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
div移动 输入框不能输入的问题
2009/11/19 Javascript
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
Linux下编译安装MySQL-Python教程
2015/02/02 Python
Python中用Decorator来简化元编程的教程
2015/04/13 Python
python之消除前缀重命名的方法
2018/10/21 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
django如何通过类视图使用装饰器
2019/07/24 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
python适合做数据挖掘吗
2020/06/16 Python
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
Python的两道面试题
2013/06/29 面试题
外企办公室竞聘演讲稿
2013/12/29 职场文书
优秀教师获奖感言
2014/01/31 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
民主生活会汇报材料
2014/12/15 职场文书
现役军人家属慰问信
2015/03/24 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript