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开发文件系统实例讲解
Oct 09 PHP
PHP 增加了对 .ZIP 文件的读取功能
Oct 09 PHP
动易数据转成dedecms的php程序
Apr 07 PHP
PHP详解ASCII码对照表与字符转换
Dec 05 PHP
深入探讨<br />和 \r\n两者有什么区别??
Jun 05 PHP
Laravel框架学习笔记(一)环境搭建
Oct 15 PHP
thinkphp中session和cookie无效的解决方法
Dec 19 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
May 30 PHP
PHP简单实现二维数组赋值与遍历功能示例
Oct 19 PHP
浅谈laravel框架sql中groupBy之后排序的问题
Oct 17 PHP
Laravel5.1 框架路由基础详解
Jan 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正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
python的dict,set,list,tuple应用详解
2014/07/24 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
PyQT实现多窗口切换
2018/04/20 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
Python二元算术运算常用方法解析
2020/09/15 Python
英国计算机商店:Technextday
2019/12/28 全球购物
大学生村官心得体会范文
2014/01/04 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python