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实现无限级分类实现代码(递归方法)
Jan 01 PHP
深入理解curl类,可用于模拟get,post和curl下载
Jun 08 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
php preg_match的匹配不同国家语言实例
Dec 29 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 PHP
Yii框架数据库查询、增加、删除操作示例
Oct 14 PHP
PHP底层运行机制与工作原理详解
Jul 31 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
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
一套英文Java笔试题面试题
2016/04/21 面试题
土木工程毕业生自荐信
2013/09/21 职场文书
建筑自我鉴定
2013/10/19 职场文书
自荐信的五个重要部分
2013/10/29 职场文书
小学生常见病防治方案
2014/06/06 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
初中差生评语
2014/12/29 职场文书
李白故里导游词
2015/02/12 职场文书
离职信范本
2015/06/23 职场文书
幼儿园六一主持词
2015/06/30 职场文书