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 email邮箱正则
Oct 08 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
Jun 21 PHP
PHP时间格式控制符对照表分享
Jul 23 PHP
php使用qr生成二维码的示例分享
Jan 20 PHP
PHP+MySQL删除操作实例
Jan 21 PHP
php通过文件流方式复制文件的方法
Mar 13 PHP
smarty中改进truncate使其支持中文的方法
May 30 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 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
一个简单的自动发送邮件系统(二)
2006/10/09 PHP
面向对象的javascript(笔记)
2009/10/06 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
2018/02/14 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
python友情链接检查方法
2015/07/08 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
Python实现性能自动化测试竟然如此简单
2019/07/30 Python
selenium自动化测试入门实战
2020/12/21 Python
2014年党课学习心得体会
2014/07/08 职场文书
危货运输企业安全生产责任书
2014/07/28 职场文书
敬老月活动总结
2014/08/28 职场文书
法人委托书的范本格式
2014/09/11 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
经费申请报告
2015/05/15 职场文书
上诉状格式
2015/05/23 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis
mysql的Buffer Pool存储及原理
2022/04/02 MySQL