PHP基于单例模式实现的数据库操作基类


Posted in PHP onJanuary 15, 2016

本文实例讲述了PHP基于单例模式实现的数据库操作基类。分享给大家供大家参考,具体如下:

配置文件:

<?php
$db = array(
    'host'=>'localhost',
    'user'=>'root',
    'password'=>'',
    'database'=>'test',
)
?>

php 数据库基类:

<?php
class db {
  public $conn;
  public static $sql;
  public static $instance=null;
  private function __construct(){
    require_once('db.config.php');
    $this->conn = mysql_connect($db['host'],$db['user'],$db['password']);
    if(!mysql_select_db($db['database'],$this->conn)){
      echo "失败";
    };
    mysql_query('set names utf8',$this->conn);
  }
  public static function getInstance(){
    if(is_null(self::$instance)){
      self::$instance = new db;
    }
    return self::$instance;
  }
  /**
   * 查询数据库
   */
  public function select($table,$condition=array(),$field = array()){
    $where='';
    if(!empty($condition)){
      foreach($condition as $k=>$v){
        $where.=$k."='".$v."' and ";
      }
      $where='where '.$where .'1=1';
    }
    $fieldstr = '';
    if(!empty($field)){
      foreach($field as $k=>$v){
        $fieldstr.= $v.',';
      }
       $fieldstr = rtrim($fieldstr,',');
    }else{
      $fieldstr = '*';
    }
    self::$sql = "select {$fieldstr} from {$table} {$where}";
    $result=mysql_query(self::$sql,$this->conn);
    $resuleRow = array();
    $i = 0;
    while($row=mysql_fetch_assoc($result)){
      foreach($row as $k=>$v){
        $resuleRow[$i][$k] = $v;
      }
      $i++;
    }
    return $resuleRow;
  }
  /**
   * 添加一条记录
   */
   public function insert($table,$data){
    $values = '';
    $datas = '';
    foreach($data as $k=>$v){
      $values.=$k.',';
      $datas.="'$v'".',';
    }
    $values = rtrim($values,',');
    $datas  = rtrim($datas,',');
    self::$sql = "INSERT INTO {$table} ({$values}) VALUES ({$datas})";
    if(mysql_query(self::$sql)){
      return mysql_insert_id();
    }else{
      return false;
    };
   }
   /**
   * 修改一条记录
   */
  public function update($table,$data,$condition=array()){
    $where='';
    if(!empty($condition)){
      foreach($condition as $k=>$v){
        $where.=$k."='".$v."' and ";
      }
      $where='where '.$where .'1=1';
    }
    $updatastr = '';
    if(!empty($data)){
      foreach($data as $k=>$v){
        $updatastr.= $k."='".$v."',";
      }
      $updatastr = 'set '.rtrim($updatastr,',');
    }
    self::$sql = "update {$table} {$updatastr} {$where}";
    return mysql_query(self::$sql);
  }
  /**
   * 删除记录
   */
   public function delete($table,$condition){
    $where='';
    if(!empty($condition)){
      foreach($condition as $k=>$v){
        $where.=$k."='".$v."' and ";
      }
      $where='where '.$where .'1=1';
    }
    self::$sql = "delete from {$table} {$where}";
    return mysql_query(self::$sql);
   }
  public static function getLastSql(){
    echo self::$sql;
  }
}
$db = db::getInstance();
//$list = $db->select('demo',array('name'=>'tom','password'=>'ds'),array('name','password'));
//echo $db->insert('demo',array('name'=>'三水点靠木','password'=>'123'));
//echo $db->update('demo',array("name"=>'xxx',"password"=>'123'),array('id'=>1));
echo $db->delete('demo',array('id'=>'2'));
db::getLastSql();
echo "<pre>";
?>

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

PHP 相关文章推荐
让PHP支持页面回退的两种方法[转]
Feb 14 PHP
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
Oct 29 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
May 02 PHP
PHP文件打开、关闭、写入的判断与执行代码
May 24 PHP
php设计模式 Visitor 访问者模式
Jun 28 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
简单的php新闻发布系统教程
May 09 PHP
微信开发之php表单微信中自动提交两次问题解决办法
Jan 08 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
Feb 04 PHP
PHP PDOStatement::closeCursor讲解
Jan 30 PHP
php创建类并调用的实例方法
Sep 25 PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 PHP
Linux安装配置php环境的方法
Jan 14 #PHP
PHP实现QQ登录实例代码
Jan 14 #PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 #PHP
详解HTTP Cookie状态管理机制
Jan 14 #PHP
在php中设置session用memcache来存储的方法总结
Jan 14 #PHP
thinkphp实现图片上传功能
Jan 13 #PHP
PHP实现伪静态方法汇总
Jan 13 #PHP
You might like
PHP判断是否为空的几个函数对比
2015/04/21 PHP
yii数据库的查询方法
2015/12/28 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
jQuery实现的兼容性浮动层示例
2016/08/02 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
详解NodeJs开发微信公众号
2018/05/25 NodeJs
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
Python基本数据类型详细介绍
2014/03/11 Python
python中import学习备忘笔记
2017/01/24 Python
Python中super函数的用法
2017/11/17 Python
mac下如何将python2.7改为python3
2018/07/13 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
python web框架 django wsgi原理解析
2019/08/20 Python
python实现滑雪游戏
2020/02/22 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
亮化工程实施方案
2014/03/17 职场文书
责任心演讲稿
2014/05/14 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
幼师求职自荐信
2015/03/26 职场文书
计划生育责任书
2015/05/09 职场文书