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 相关文章推荐
破解图片防盗链的代码(asp/php)测试通过
Jul 02 PHP
采用ThinkPHP中F方法实现快速缓存实例
Jun 13 PHP
php中in_array函数用法分析
Nov 15 PHP
ThinkPHP实现ajax仿官网搜索功能实例
Dec 02 PHP
解析WordPress中函数钩子hook的作用及基本用法
Dec 22 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 PHP
PHP convert_cyr_string()函数讲解
Feb 13 PHP
PHP使用phpunit进行单元测试示例
Sep 23 PHP
PHP dirname功能及原理实例解析
Oct 28 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
模仿OSO的论坛(二)
2006/10/09 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
给文字加上着重号的JS代码
2013/11/12 Javascript
使用jquery实现放大镜效果
2014/09/02 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
学习jQuey中的return false
2015/12/18 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
Python实现栈的方法
2015/05/26 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
深入浅析Python中的yield关键字
2018/01/24 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
Flask配置Cors跨域的实现
2019/07/12 Python
基于python监控程序是否关闭
2020/01/14 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
绩效专员岗位职责
2013/12/02 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
vue如何清除浏览器历史栈
2022/05/25 Vue.js
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL