封装好的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类的更多相关文章

  1. Python封装的访问MySQL数据库的类及DEMO

    # Filename:mysql_class.py # Author:Rain.Zen; Date: 2014-04-15 import MySQLdb class MyDb: '''初始化[类似于构 ...

  2. 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入

    一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...

  3. 封装:PDO与MySQL之间的无缝切换

    以下的例子是将MySQL和PDO封装好,再无缝切换: 文件目录: config.php文件:   <?php return array( // 数据库配置 'DB' => array( ' ...

  4. MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)

    MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...

  5. php : mysql数据库操作类演示

    设计目标: 1,该类一实例化,就可以自动连接上mysql数据库: 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX): 4,可 ...

  6. php MySQL数据库操作类源代码

    php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...

  7. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  8. 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?

    既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...

  9. 封装获取网络信息Linux—API类

    封装获取网络信息Linux—API类 封装好的库: #ifndef NETINFORMATION_H #define NETINFORMATION_H #include <netdb.h> ...

随机推荐

  1. Web充斥着存在漏洞的过期JavaScript库

    虽然使用第三方软件库通常会降低开发的时间,但同时也会增加网站暴露出的攻击表面,对此我们应有充分的认识.因此需要保持第三方软件库的最新版本依赖,以便从安全更新中获益.即便如此,一份近期研究表明,在Ale ...

  2. 卷积神经网络中的通道 channel

    卷积神经网络中 channels 分为三种:    (1):最初输入的图片样本的 channels ,取决于图片类型,比如RGB, channels=3    (2):卷积操作完成后输出的 out_c ...

  3. HDU3374 字符串最大最小表示法模板

    一开始没太看懂什么意思,拿笔反复推了一遍才大概知道最大最小表示法是怎么求的,感觉太神奇了... #include <iostream> #include <cstdio> #i ...

  4. .NET2.0引用.NET3.5的System.Core.dll&Dapper在.NET2.0下的配置

    微软MSDN对.NET2.0,3.0,3.5的描述: .NET Framework 版本 2.0.3.0 和 3.5 是使用同一 CLR 版本 (CLR 2.0) 生成的. 这些版本表示单个安装的连续 ...

  5. java中error和exception的区别

    转自:https://www.jianshu.com/p/e8bbee3c1c4a Error类和Exception类的父类都是throwable类,他们的区别是: Error类一般是指与虚拟机相关的 ...

  6. PHP学习1.5-预定义超全局数组变量

    1.PHP 预定义的超全局变量数组 特性: a.特殊的数组,操作方式没有区别 b.不用声明,php脚本中默认存在,因为在php中不用定义,所以在自定义变量是应避免和预定的全局变量同名 c.在全局范围内 ...

  7. centos apache安装oracle扩展

    参考网址: http://blog.csdn.net/a82168506/article/details/11763989 步骤如下: 下载安装包,下载地址.(我下载的11.1版本) http://w ...

  8. call(this)自记

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 读书笔记--Head First 面向对象分析与设计 目录

    1.良好应用程序的基石 2.收集需求 3.需求变更 4.分析 5.良好的设计=灵活的软件 6.解决大问题 7.架构 8.设计原则 9.迭代与测试 10.OOA&D 的生命周期 附录1 附录2

  10. 对BOM的总结

    参考:JavaScript半知半解 TG著 BOM对象 Window对象是客户端JavaScript程序的全局对象. Window对象使得JavaScript与浏览器进行交互. 所有的JavaScri ...