简单的MySQLDB类
<?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类的更多相关文章
- VC++ 一个简单的Log类
在软件开发中,为程序建立Log日志是很必要的,它可以记录程序运行的状态以及出错信息,方便维护和调试. 下面实现了一个简单的Log类,使用非常简单,仅供参考. // CLogHelper.h : hea ...
- C++ 最简单的日志类
最近搞一个 C++ 项目的二次开发,没玩过 C++,可谓步履维艰.自己写个简单的日志类都被各种坑折磨.终于搞定了. 参考了这篇博客,并且进一步简化:https://www.cnblogs.com/Ds ...
- python+selenium之自定义封装一个简单的Log类
python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...
- C++定义一个简单的Computer类
/*定义一个简单的Computer类 有数据成员芯片(cpu).内存(ram).光驱(cdrom)等等, 有两个公有成员函数run.stop.cpu为CPU类的一个对象, ram为RAM类的一个对象, ...
- Python之自定义封装一个简单的Log类
参考:http://www.jb51.net/article/42626.htm 参考:http://blog.csdn.net/u011541946/article/details/70198676 ...
- js进阶 10-7 简单的伪类选择器可以干什么
js进阶 10-7 简单的伪类选择器可以干什么 一.总结 一句话总结:伪类选择器是冒号. 1.学而不用,有什么用? 多用啊,在项目中多用 2.简单的伪类选择器可以干什么? 除某元素以外,某元素的一切索 ...
- 【C/C++开发】C++实现简单的线程类
C++封装一个简单的线程类 多线程编程简介: 大家在编程时,经常需要在程序中启动一个或多个线程来处理任务,而如果每次都是去调用系统创建线程的API函数来创建,代码量虽不多,但线程的创建和业务逻辑代码就 ...
- Python+Selenium中级篇之8-Python自定义封装一个简单的Log类《转载》
Python+Selenium中级篇之8-Python自定义封装一个简单的Log类: https://blog.csdn.net/u011541946/article/details/70198676
- 043-PHP简单获得一个类对应的反射信息
<?php // 简单获得一个类对应的反射信息 class demo{ CONST CON_STR = '123456'; public $str_1; private $str_2; prot ...
随机推荐
- iOS开发——网络Swift篇&NSURLSession加载数据、下载、上传文件
NSURLSession加载数据.下载.上传文件 NSURLSession类支持三种类型的任务:加载数据.下载和上传.下面通过样例分别进行介绍. 1,使用Data Task加载数据 使用全局的 ...
- C++之EOF()
fstream流的eof()推断有点不合常理 按常理逻辑来说,假设到了文件末尾的话,eof()应该返回真,可是,C++输入输出流怎样知道是否到末尾了呢? 原来依据的是:假设fin>>不能再 ...
- C++_快速排序
void quick_sort(int s[],int l,int r) { if(l<r) { int i=l,j=r,x=s[l]; while(i<j) { while( i< ...
- OpenVPN莫名其妙断线的问题及其解决-confirm
本文很短,目的在于confirm一下凌乱的< OpenVPN莫名其妙断线的问题及其解决>,如果看觉得我比较啰嗦,那么一定要看看最后一个小节,好在CSDN为每篇文章都自动添加了目录,可以直接 ...
- php与ajax交互中文乱码(字符串转化)
一.从后台传过来的json不做处理,前端result.name这样调用回乱码.应该使用urldecode将jsonencod转码 注意json只接受utf-8编码的字符,所以json_encode() ...
- E - Trees on the level
Trees on the level Background Trees are fundamental in many branches of computer science. Current ...
- A+B Problem(V)
描述 做了A+B Problem之后,Yougth感觉太简单了,于是他想让你求出两个数反转后相加的值.帮帮他吧 输入 有多组测试数据.每组包括两个数m和n,数据保证int范围,当m和n同时为0是表示输 ...
- hibernate 入门案例
1,创建工程,导入jar ojdbc14.jar 数据库驱动包,我用的是oracle数据库,根据实际的数据库选择驱动包 创建java类,并利用bibernate插件完成orm映射,创建hbm.xml ...
- MySQL Index Condition Pushdown(ICP) 优化
本文是作者留下的一个坑,他去上茅坑了.茅坑是谁?你猜.
- (转载)ConcurrentHashMap 原理
集合是编程中最常用的数据结构.而谈到并发,几乎总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区 (Queue),比如常会用缓存作为外部文件的副本(HashMap).这篇文章 ...