封装好的MySQL.class.php类
封装好的MySQL.class.php类
作用:数据库操作类
<?php
header('content-type:text/html;charset=utf-8');
class MySQLDB{
private $host; //主机地址
private $port; //端口号
private $user; //用户名
private $pass; //密码
private $dbname; //数据库名
private $charset;//字符集
private $link; //保存连接数据库资源
private static $instance = null; //单例模式中的$MySQLDB对象 /**
*@param array $config 配置文件
*/
private function __construct ($config) { // 初始化属性的值
$this->init($config);
// 连接数据库
$this->my_connect();
// 设置字符集
$this->my_charset();
// 选择数据库
$this->my_dbname();
} /**
* 只能new一次,单例模式
*@param array $config 传递给构造方法的数组参数
*/
public static function getInstacne($config) {
if (self::$instance == null) {
self::$instance = new self($config);
}
return self::$instance;
} /***
*私有化克隆魔术方法
*/
private function _clone() {} /**
*初始化
*@param array $config 传递给初始化方法的数组参数
*/
private function init($config) {
$this->host = isset($config['host'])?$config['host']:'localhost';
$this->port = isset($config['port'])?$config['port']:'3306';
$this->user = isset($config['user'])?$config['user']:'root';
$this->pass = isset($config['pass'])?$config['pass']:'';
$this->dbname = isset($config['dbname'])?$config['dbname']:'';
$this->charset = isset($config['charset'])?$config['charset']:'utf8';
} /**
*错误测试方法
*@param string $sql sql语句
*直接用途:用来增删改
*/
public function my_query($sql) {
if ($result = mysql_query($sql)) {
return $result;
}else {
echo "执行sql语句失败;<br/>";
echo "错误代码:",mysql_errno(),"<br/>";
echo "错误信息:",mysql_error(),'<br/>';
return false;
}
}
/**
*连接数据库
*/
private function my_connect() {
if ($link = mysql_connect("$this->host:$this->port",$this->user,$this->pass)) {
$this->link = $link;
}else {
echo "连接数据库失败:<br/>";
echo "错误代码:",mysql_errno(),"<br/>";
echo "错误信息:",mysql_error(),'<br/>';
return false;
}
} /**
*设置字符集
*/
private function my_charset() {
$sql = "set names $this->charset";
$this->my_query($sql);
}
/**
*选择数据库
*/
private function my_dbname() {
$sql = "use $this->dbname";
return $this->my_query($sql);
} /**
*返回多行多列的结果集,二维数组
*@param string sql语句
*@return mixed(array|false) *执行成功返回数组,失败返回false
*/
public function fetchAll($sql) {
if($result = $this->my_query($sql)) {
//返回资源结果集,遍历
$rows[] = '';
while ($row = mysql_fetch_assoc($result)) {
$rows[] = $row;
}
//结果集使用完毕,主动释放
mysql_free_result($result);
//返回二维数组
return $rows;
} else {
return false;
} } /**
* 返回一行多列的结果集,一维数组
*@param string 一条sql语句
*@return mixed(array|false) 执行成功返回数组,失败返回false
*/
public function fetchRow($sql) {
if($result = $this->my_query($sql)) {
//返回资源结果集,遍历
$row = mysql_fetch_assoc($result);
//结果集使用完毕,主动释放
mysql_free_result($result);
//返回一维数组
return $row;
} else {
return false;
}
} /**
*返回一行一列的结果集,单一值
*@param string 一条sql语句
*@return mixed(array|false) 执行成功返回数组,失败返回false
*/
public function fetchColumn($sql) {
if($result = $this->my_query($sql)) {
//返回资源结果集,提取
$row = mysql_fetch_row($result);
//结果集使用完毕,主动释放
mysql_free_result($result);
//返回单一值
return isset($row[0])?$row[0]:false;
} else {
return false;
}
} /**
*析构方法
*/
public function __destruct() {
@mysql_close($this->link);
}
/**
*__sleep 序列化对象的时候触发执行
*/
public function __sleep() {
return array('host','port','user','pass','charset','dbname') ;
} /**
*__wakeup 反序列化的时候触发执行
*初始化操作
*/ public function __wakeup() {
//初始化操作
// 连接数据库
$this->my_connect();
// 设置字符集
$this->my_charset();
// 选择数据库
$this->my_dbname();
} /**
*__set 为一个不可访问的属性赋值的时候自动触发
*@param string $name 属性名
*@param mixed $value 属性值
*/
public function __set($name,$value) {
$allow_set = array('host','port','user','pass','dbname','charset');
if(in_array($name,$allow_set)) {
//当前属性可以被赋值
$this->$name = $value;
}
} /**
*__get *获得一个不可访问的属性的值的时候自动触发
*@param string $name 属性名
*/
public function __get($name) {
$allow_get = array('host','port','user','pass','dbname','charset');
if (in_array($name,$allow_get)) {
return $this->$name;
}
} /**
*__call 访问一个不可访问的对象方法的时候触发
*@param string $name
*@param array $argument 参数列表
*/
public function __call($name, $argument) {
echo "对不起,您访问的".$name."()方法不存在!<br/>";
} /**
*__callstatic 访问一个不可访问的类方法(静态方法)的时候触发
*@param string $name
*@param array $argument 参数列表
*/
public static function __callStatic($name, $argument) {
echo "对不起,您访问的".$name."()静态方法不存在!<br/>";
} /**
*调用初始化方法
*@param array $config 配置文件数组
*/
public function get_init($config) {
$this->init($config);
} /** 调用连接数据库方法*/
public function get_my_connect() {
$this->my_connect();
} /** 调用设置字符集方法*/
public function get_my_charset() {
$this->my_charset();
} /** 调用选择数据库方法*/
public function get_my_dbname() {
$this->my_dbname();
} }
调用例子:
include './MySQLDB.class.php';
$config = [
'pass'=>'123456',
'dbname'=>'bbs'
];
$db = MySQLDB::getInstacne($config);
$db::show();
$db->hahaha(); echo "<hr/>";
封装好的MySQL.class.php类的更多相关文章
- Python封装的访问MySQL数据库的类及DEMO
# Filename:mysql_class.py # Author:Rain.Zen; Date: 2014-04-15 import MySQLdb class MyDb: '''初始化[类似于构 ...
- 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入
一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...
- 封装:PDO与MySQL之间的无缝切换
以下的例子是将MySQL和PDO封装好,再无缝切换: 文件目录: config.php文件: <?php return array( // 数据库配置 'DB' => array( ' ...
- MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...
- php : mysql数据库操作类演示
设计目标: 1,该类一实例化,就可以自动连接上mysql数据库: 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX): 4,可 ...
- php MySQL数据库操作类源代码
php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...
- 自己封装的poi操作Excel工具类
自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...
- 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?
既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...
- 封装获取网络信息Linux—API类
封装获取网络信息Linux—API类 封装好的库: #ifndef NETINFORMATION_H #define NETINFORMATION_H #include <netdb.h> ...
随机推荐
- PAT甲级——A1028 List Sorting
Excel can sort records according to any column. Now you are supposed to imitate this function. Input ...
- Entity Framework底层操作封装V2版本号(5)
这个框架到如今最大的变化立即就要出现了,哪就是对缓存的使用.由于系统常常要去读取数据库数据.可是大家知道.数据库的处理能力是有限的,所以对于一些数据量不大,可是又 须要常常去读取的功能来说.更好的方法 ...
- 使用video.js支持flv格式
html5的video标签只支持mp4.webm.ogg三种格式,不支持flv格式,在使用video.js时,如果使用html5是会报错不支持. 修改了一下代码 js部分 videojs.option ...
- spring-jdbc-aop事务
1 spring整合JDBC 1.1 概述 spring提供了很多模板整合Dao技术 spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => J ...
- TensorFlow的安装 (python3.6在有pip的条件下如何安装TensorFlow)
1.Window,MacOS,Linux都已支持Tensorflow. 2.Window用户只能使用python3.5(64bit).MacOS,Linux支持python2.7和python ...
- HNOI 2019 多边形
HNOI 2019 多边形 题意 小 R 与小 W 在玩游戏. 他们有一个边数为\(n\)的凸多边形,其顶点沿逆时针方向标号依次为\(1,2,3...n\).最开始凸多边形中有\(n\)条线段,即多边 ...
- CF538G (套路题)
CF538G 题目大意 你有一个长度为\(l\)的指令序列,每个指令为向上,向下,向左,向右中的一种. 机器人会循环执行该序列,即,执行完第\(l\)个指令后,就会重新开始执行第一个指令. 现在,给你 ...
- 跟我一起做一个vue的小项目(十)
接下来我们对城市列表页面进行优化,除了对数据优化,也会进行节流处理 //src\pages\city\components\Alphabet.vue <template> <ul c ...
- Redis源码解析:18Hiredis同步API和回复解析API代码解析
Redis的sentinel模式使用了Hiredis代码,Hiredis是redis数据库一个轻量级的C语言客户端库.它实现的向Redis发送命令的API函数redisCommand,使用方法类似于p ...
- Django项目:CRM(客户关系管理系统)--53--44PerfectCRM实现账号快速注册登陆
# gbacc_ajax_urls.py # ————————42PerfectCRM实现AJAX全局账号注册———————— from django.conf.urls import url fro ...