<?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. 我总结的18个非常好用的vim指令

    在Linux下最有名的程序编辑器非vim莫属了. 在一般模式下, 1.dd——删除光标所在行 2./word ——全文搜索指定单词 3.G ——将光标移动到文件的最后一行,移动到第99行,就是99G ...

  2. 解决Download interrupted: Connection to https://dl-ssl.google.com refused的问题

    运行->drivers->etc->hosts 加入一行 74.125.237.1 dl-ssl.google.com ok! =================上述方法已经失效, ...

  3. linux之chmod

    文件/目录权限设置命令:chmod 这是Linux系统管理员最常用到的命令之一,它用于改变文件或目录的访问权限.该命令有两种用法: 用包含字母和操作符表达式的文字设定法 其语法格式为:chmod [w ...

  4. UTF8 与 UTF16 编码

    Unicode 的发展,英文好的直接去 unicode.org 上去看吧,不好的可以移步到这里 看dengyunze的总结:<关于UTF8,UTF16,UTF32,UTF16-LE,UTF16- ...

  5. jQuery之父:每天都写点代码

    去年秋天,我的“兼职编程项目”遇到了一些问题:要不是从 Khan Academy 的项目里挪出时间来的话,我根本没办法将不理想的进度弥补上. 这些项目遇到了一些严重的问题.之前的工作我主要是在周末,有 ...

  6. html/css 两个div在同一行

    在界面设计的时候,经常需要将两个div在同一行显示. 但是每次都会忘记怎么做,特此随笔,备忘. 如以下要将“第一个div”和“第二个div”显示在同一行: <div id="id1&q ...

  7. python(2)-字符串(2)

    字符串格式化: 前面说过一种字符串格式化方法,来复习一下: >>> print('His name is %s', 'jeff') His name is %s jeff 其实格式化 ...

  8. SqlServer之游标深入

    原创文章,转载必需注明出处:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/introduce-for-sqlserver-curs ...

  9. 关于Talend的Patch分支对应Eclipse开发环境的配置总结.

    给产品打patch有时候会遇到很多问题,给产品打patch而且大多数是给很多老版本的Studio打,而且要有对应的patch的开发环境. 但是不巧有些patch对应的git仓库目录结构和一些其他版本的 ...

  10. 只能在执行 Render() 的过程中调用 RegisterForEventValidation(RegisterForEventValidation can only be called during Render();

    只能在执行 Render() 的过程中调用 RegisterForEventValidation(RegisterForEventValidation can only be called durin ...