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 相关文章推荐
IIS+PHP+MySQL+Zend配置 (视频教程)
Dec 13 PHP
IStream与TStream之间的相互转换
Aug 01 PHP
PHP开发过程中常用函数收藏
Dec 14 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
xss防御之php利用httponly防xss攻击
Mar 21 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
php程序员应具有的7种能力小结
Nov 27 PHP
windows下配置php5.5开发环境及开发扩展
Dec 25 PHP
php验证码生成代码
Nov 11 PHP
启用OPCache提高PHP程序性能的方法
Mar 21 PHP
Laravel登录失败次数限制的实现方法
Aug 26 PHP
PHP 使用位运算实现四则运算的代码
Mar 09 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格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
php简单图像创建入门实例
2015/06/10 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
移动端界面的适配
2017/01/11 Javascript
Angularjs上传图片实例详解
2017/08/06 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python编码类型转换方法详解
2016/07/01 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
青春无悔演讲稿
2014/05/08 职场文书
助学金感谢信
2015/01/20 职场文书
《给予树》教学反思
2016/03/03 职场文书
2016年国庆节假期旅游工作总结
2016/04/01 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang