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 is_dir() 判断给定文件名是否是一个目录
May 10 PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
php计算函数执行时间的方法
Mar 20 PHP
php中关于socket的系列函数总结
May 18 PHP
最新制作ThinkPHP3.2.3完全开发手册
Nov 23 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
浅谈php使用curl模拟多线程发送请求
Mar 08 PHP
PHP里的$_GET数组介绍
Mar 22 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边学边教》(01.开篇――准备工作)
2006/12/13 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
python批量修改文件后缀示例代码分享
2013/12/24 Python
Python入门篇之编程习惯与特点
2014/10/17 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
python中time tzset()函数实例用法
2021/02/18 Python
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
中学优秀班主任事迹材料
2014/05/01 职场文书
党员个人总结范文
2015/02/14 职场文书
聘任合同书
2015/09/21 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技