<?php
error_reporting(E_ALL ^ E_DEPRECATED); //数据库操作类
class MySQLDB{ //属性--必要的信息
private $_host; //主机
private $_port; //端口
private $_user; //用户名
private $_pass; //密码
private $_charset;//字符集
private $_dbname; //默认数据库 //属性--运行时生成
public $_link; //mysql link 资源 private static $_instance;
public static function getInstance($params=array()){
if(!self::$_instance instanceof self){
self::$_instance = new self($params);
}
return self::$_instance;
}
private function __clone(){} /*
* 构造方法
* @param $param=array() array 关联数组 需要六个属性值
*/
private function __construct($params=array()){
//初始化属性
$this->_initParams($params);
//连接数据库服务器
$this->_connect();
//设定字符集
$this->_setCharset();
//选择默认数据
$this->_selectDB();
} /*
* 初始化数据库服务器参数
*/
private function _initParams($params){
$this->_host = isset($params['host'])?$params['host']:'127.0.0.1'; //本机
$this->_port = isset($params['port'])?$params['port']:'3306'; //
$this->_user = isset($params['user'])?$params['user']:''; //匿名用户
$this->_pass = isset($params['pass'])?$params['pass']:''; //没有密码
$this->_charset = isset($params['charset'])?$params['charset']:'utf8'; //utf8
$this->_dbname = isset($params['dbname'])?$params['dbname']:''; //表示不用选择默认数据库
} /*
* 连接数据库服务器
*/
private function _connect(){
//127.0.0.1:3306
if($link = mysql_connect("$this->_host:$this->_port",$this->_user,$this->_pass)){
//成功
$this->_link = $link;
}else{
//失败,强制脚本结束,提示错误信息
die("-_-!,连接数据库服务器失败,请确定连接选项");
}
} /*
* 设定指定字符集
*/
private function _setCharset(){
$sql = "set names $this->_charset";
if(mysql_query($sql,$this->_link)){
//成功
}else{
//执行失败给出错误信息
echo '-_-!SQL执行失败<br/>';
echo '错误的SQL为:',$sql,'<br/>';
echo '错误代码为:',mysql_errno($this->_link),'<br/>';
echo '错误信息为:',mysql_error($this->_link);
die;
}
} /*
* 选择默认数据库
* 如果没有指定,则不选择
*/
private function _selectDB(){
//判断是否需要选择默认数据库,表示不需要,防止为0
if($this->_dbname !== ''){
//不为空,才选择数据库
$sql = "use `$this->_dbname`";
if(mysql_query($sql,$this->_link)){
//成功
}else{
//执行失败给出错误信息
echo '-_-!SQL执行失败<br/>';
echo '错误的SQL为:',$sql,'<br/>';
echo '错误代码为:',mysql_errno($this->_link),'<br/>';
echo '错误信息为:',mysql_error($this->_link);
die;
}
}
} /**
* 获得全部记录
*
* @param $sql string 查询类的SQL(select,show,desc)
*
* @return array 二维数组,记录的集合
*/
public function fetchAll($sql){
//先执行
if(!$result = mysql_query($sql,$this->_link)){
//执行失败给出错误信息
echo '-_-!SQL执行失败<br/>';
echo '错误的SQL为:',$sql,'<br/>';
echo '错误代码为:',mysql_errno($this->_link),'<br/>';
echo '错误信息为:',mysql_error($this->_link);
die;
}
//获取数据
$rows = array();
while($row = mysql_fetch_assoc($result)){
$rows[] = $row;
}
//释放结果集
mysql_free_result($result);
//返回
return $rows;
} /**
* 获得一条记录
*
* @param $sql string 查询类的SQL(select,show,desc)
*
* @return array 一维数组,一条记录
*/
public function fetchRow($sql){
//先执行
if(!$result = mysql_query($sql,$this->_link)){
//执行失败给出错误信息
echo '-_-!SQL执行失败<br/>';
echo '错误的SQL为:',$sql,'<br/>';
echo '错误代码为:',mysql_errno($this->_link),'<br/>';
echo '错误信息为:',mysql_error($this->_link);
die;
}
//获取数据
$row = mysql_fetch_assoc($result);
//释放结果集
mysql_free_result($result);
//返回
return $row;
} /**
* 获得一个数据
*
* @param $sql string 查询类的SQL(select,show,desc)
*
* @return string 唯一的数据 第一条记录的第一列
*/
public function fetchColumn($sql){
//先执行
if(!$result = mysql_query($sql,$this->_link)){
//执行失败给出错误信息
echo '-_-!SQL执行失败<br/>';
echo '错误的SQL为:',$sql,'<br/>';
echo '错误代码为:',mysql_errno($this->_link),'<br/>';
echo '错误信息为:',mysql_error($this->_link);
die;
}
//获取数据
$row = mysql_fetch_row($result);
//释放结果集
mysql_free_result($result);
//返回
return $row[0];
} /**
* 序列化时执行的方法
* @return array每个数组元素为一个需要被序列化的属性名
*
*/
public function __sleep(){
return array('_host','_post','_user','_pass','_charset','_dbname');
} /*
* 反序列化时被执行
* 重新初始化工作
*/
public function __wakeup(){
//连接数据库服务器
$this->_connect();
//设定连接字符集
$this->_setCharset();
//选择默认数据库
$this->_selectDB();
}
}

简单的MySQLDB类的更多相关文章

  1. VC++ 一个简单的Log类

    在软件开发中,为程序建立Log日志是很必要的,它可以记录程序运行的状态以及出错信息,方便维护和调试. 下面实现了一个简单的Log类,使用非常简单,仅供参考. // CLogHelper.h : hea ...

  2. C++ 最简单的日志类

    最近搞一个 C++ 项目的二次开发,没玩过 C++,可谓步履维艰.自己写个简单的日志类都被各种坑折磨.终于搞定了. 参考了这篇博客,并且进一步简化:https://www.cnblogs.com/Ds ...

  3. python+selenium之自定义封装一个简单的Log类

    python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...

  4. C++定义一个简单的Computer类

    /*定义一个简单的Computer类 有数据成员芯片(cpu).内存(ram).光驱(cdrom)等等, 有两个公有成员函数run.stop.cpu为CPU类的一个对象, ram为RAM类的一个对象, ...

  5. Python之自定义封装一个简单的Log类

    参考:http://www.jb51.net/article/42626.htm 参考:http://blog.csdn.net/u011541946/article/details/70198676 ...

  6. js进阶 10-7 简单的伪类选择器可以干什么

    js进阶 10-7 简单的伪类选择器可以干什么 一.总结 一句话总结:伪类选择器是冒号. 1.学而不用,有什么用? 多用啊,在项目中多用 2.简单的伪类选择器可以干什么? 除某元素以外,某元素的一切索 ...

  7. 【C/C++开发】C++实现简单的线程类

    C++封装一个简单的线程类 多线程编程简介: 大家在编程时,经常需要在程序中启动一个或多个线程来处理任务,而如果每次都是去调用系统创建线程的API函数来创建,代码量虽不多,但线程的创建和业务逻辑代码就 ...

  8. Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》

    Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676

  9. 043-PHP简单获得一个类对应的反射信息

    <?php // 简单获得一个类对应的反射信息 class demo{ CONST CON_STR = '123456'; public $str_1; private $str_2; prot ...

随机推荐

  1. iOS开发——语法&高级Block练习

    高级Block练习 一 .最简单的block使用 使用block的三个步骤:1.定义block变量 2.创建block代码块 3.调用block匿名函数 定义一个block的构成包括:返回值,bloc ...

  2. Metadata Lock原理7

    http://blog.itpub.net/22664653/viewspace-1791744/ 一 简介 通过前面两篇文章的介绍,相信读到这里的各位对MDL 锁已经有了比较深入的了解了,本文将结合 ...

  3. php的引用&(就是在变量或者函数、对象等前面加上&符号)

    官方文档: 1.引用是什么:http://www.php.net/manual/zh/language.references.whatare.php 2.引用做什么:http://www.php.ne ...

  4. Redis 连接

      Redis 连接命令主要是用于连接 redis 服务. 实例 以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行: redis 127.0.0.1:6379> ...

  5. 基于MTD的NAND驱动开发、K9F1G08 2K page、Yaffs2 Files System

    转载:http://hi.baidu.com/cui1206/item/1d4119e376132513585dd886 基于MTD的NAND驱动(linux-2.6.22.10内核),目前已可以在该 ...

  6. SelectionKey理解(总结)

    SelectKey注册了写事件,不在合适的时间去除掉,会一直触发写事件,因为写事件是代码触发的 client.register(selector, SelectionKey.OP_WRITE); 或者 ...

  7. css笔记05:表单

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  8. IE11下用forms身份验证的问题

    <authentication mode="Forms"> <forms name="weboa" loginUrl="login. ...

  9. linux cd

    cd -回到上一次 操作的目录 cd ..回到上级目录 cd ../../回到上两级目录

  10. set_ip_pool

    #! /usr/bin/env python# -*- coding: utf-8 -*- import redisimport urllib2class RedisConnect:    #clas ...