PHP基于单例模式实现的mysql类


Posted in PHP onJanuary 09, 2016

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

<?php
defined('ACC')||exit('Access Denied');
// 封装mysql操作类,包括连接功能,及查询功能.
class mysql extends absdb{
  protected static $ins = null;
  protected $host; // 主机名
  protected $user; // 用户名
  protected $passwd; // 密码
  protected $db;   // 数据库名
  protected $port;  // 端口
  protected $conn = null;
  // 在内部操作,获得一个对象
  public static function getIns() {
    if(self::$ins === null) {
      self::$ins = new self();
    }
    $conf = conf::getIns();
    self::$ins->host = $conf->host;
    self::$ins->user = $conf->user;
    self::$ins->passwd = $conf->pwd;
    self::$ins->db = $conf->db;
    self::$ins->port = $conf->port;
    self::$ins->connect();
    self::$ins->select_db();
    self::$ins->setChar();
    return self::$ins;
  }
  // 不让外部做new操作,
  protected function __construct() {
  }
  // 连接数据库
  public function connect() {
    $this->conn = @mysql_connect($this->host,$this->user,$this->passwd,$this->port);
    if(!$this->conn) {
      $error = new Exception('数据库连不上',9);
      throw $error;
    }
  }
  // 发送sql查询
  public function query($sql) {
    $rs = mysql_query($sql,$this->conn);
    if(!$rs) {
      log::write($sql);
    }
    return $rs;
  }
  // 封装一个getAll方法
  // 参数:$sql
  // 返回: array,false
  public function getAll($sql) {
    $rs = $this->query($sql);
    if(!$rs) {
      return false;
    }
    $list = array();
    while($row = mysql_fetch_assoc($rs)) {
      $list[] = $row;
    }
    return $list;
  }
  // 封装一个getRow方法
  // 参数:$sql
  // 返回: array,false
  public function getRow($sql) {
    $rs = $this->query($sql);
    if(!$rs) {
      return false;
    }
    return mysql_fetch_assoc($rs);
  }
  // 封装一个getOne方法,
  // 参数: $sql
  // 返回: int,str(单一的值)
  public function getOne($sql) {
    $rs = $this->query($sql);
    if(!$rs) {
      return false;
    }
    $tmp = mysql_fetch_row($rs);
    return $tmp[0];
  }
  // 封装一个afftect_rows()方法
  // 参数:无
  // 返回 int 受影响行数
  public function affected_rows() {
    return mysql_affected_rows($this->conn);
  }
  // 返回最新生成的auto_increment列的值
  public function last_id() {
    return mysql_insert_id($this->conn);
  }
  // 选库函数
  public function select_db() {
    $sql = 'use ' . $this->db;
    return $this->query($sql);
  }
  // 设置字符集的函数
  public function setChar() {
    $sql = 'set names utf8';
    return $this->query($sql);
  }
  // 自动生成insert语句,update语句并执行
  public function autoExecute($data,$table,$act='insert',$where='') {
    if($act == 'insert') {
      $sql = 'insert into ' . $table . ' (';
      $sql .= implode(',',(array_keys($data)));
      $sql .= ') values (\'';
      $sql .= implode("','",array_values($data));
      $sql .= "')";
    } else if($act == 'update') {
      if(!trim($where)) {
        return false;
      }
      $sql = 'update ' . $table . ' set ';
      foreach($data as $k=>$v) {
        $sql .= $k;
        $sql .= '=';
        $sql .= "'".$v."',";
      }
      $sql = substr($sql,0,-1);
      $sql .= ' where ';
      $sql .= $where;
    } else {
      return false;
    }
    //return $sql;
    return $this->query($sql);
  }
}

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

PHP 相关文章推荐
用PHP控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
php面向对象全攻略 (十五) 多态的应用
Sep 30 PHP
PHP调用Twitter的RSS的实现代码
Mar 10 PHP
php读取纯真ip数据库使用示例
Jan 26 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
Nov 25 PHP
Yii入门教程之Yii安装及hello world
Nov 25 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 PHP
PHP回调函数概念与用法实例分析
Nov 03 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 PHP
php探针使用原理和技巧讲解
Sep 17 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 PHP
thinkPHP查询方式小结
Jan 09 #PHP
thinkPHP中多维数组的遍历方法
Jan 09 #PHP
ThinkPHP中html:list标签用法分析
Jan 09 #PHP
thinkphp中字符截取函数msubstr()用法分析
Jan 09 #PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
Jan 09 #PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
Jan 09 #PHP
yii2中使用Active Record模式的方法
Jan 09 #PHP
You might like
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
2010/05/06 Javascript
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
js实现楼层导航功能
2017/02/23 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
微信小程序实现时间预约功能
2018/11/27 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
vue 实现图片懒加载功能
2020/12/31 Vue.js
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
python 把列表转化为字符串的方法
2018/10/23 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
2019/06/21 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
大学生学习党课思想汇报
2014/01/03 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
公司管理建议书范文
2014/03/12 职场文书
经典团队口号大全
2014/06/21 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
尊师重教演讲稿
2014/09/04 职场文书
银行自荐信范文
2015/03/25 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技