封装好的PDO类
封装PDO类,方便使用:
<?php
header('content-type:text/html;charset=utf-8');
/**
* 封装PDODB类
*/
// 加载接口
// include './I_DB.interface.php';
class PDODB{
/**
* 定义相关属性
*/
private $host; //主机地址
private $port; //端口号
private $user; //用户名
private $pass; //密码
private $dbname; //数据库名
private $charset;//字符集
private $dsn; //数据源名称
private $pdo; //用于存放PDO的一个对象
// 静态私有属性用于保存单例对象
private static $instance; /**
* [__construct 构造方法]
* @param [array] $config [配置数组]
*/
private function __construct($config) {
// 初始化属性
$this->initParams($config);
// 初始化dsn
$this->initDSN();
// 实例化PDO对象
$this->initPDO();
// 初始化PDO对象的属性
$this->initAttribute();
} /**
* [getInstance 获取PDO单例对象的公开方法]
* @param [array] $config [description]
* @return [PDOobject] self::$instance [pdo对象]
*/
public static function getInstance($config) {
if (!self::$instance instanceof self) {
self::$instance = new self($config);
}
return self::$instance;
} /**
* [initParams 初始化属性]
* @param [array] $config [配置数组]
*/
private function initParams($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';
}
/**
* [initDSN 初始化dsn]
*/
private function initDSN() {
$this->dsn = "mysql:host=$this->host;port=$this->port;dbname=$this->dbname;charset=$this->charset";
} /**
* [initPDO 实例化PDO对象]
* @return [boolean] [false|none]
*/
private function initPDO() {
// 在实例化PDO对象的时候自动的走异常模式(也是唯一走异常模式的地方)
try{
$this->pdo = new PDO($this->dsn,$this->user,$this->pass);
}catch(PDOException $e) {
$this->my_error($e,$sql);
}
} /**
* [initAttribute 初始化PDO对象属性]
* @return [boolean] [false|none]
*/
private function initAttribute() {
// 修改错误模式为异常模式
$this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
} /**
* [my_error 输出异常信息]
* @param [PDOException] $e [异常对象]
* @return [boolean] [false|none]
*/
private function my_error($e,$sql) {
echo "执行sql语句失败!<br/>";
echo "错误语句为:",$sql,"<br/>";
echo "错误的代码是:",$e->getCode(),"<br/>";
echo "错误的信息是:",$e->getMessage(),"<br/>";
echo "错误的脚本是:",$e->getFile(),"<br/>";
echo "错误的行号是:",$e->getLine(),'<br/>';
return false;
} /**
* [my_query 执行一条sql语句,实现增删改]
* @param [string] $sql [sql语句]
* @return [array] $result [资源结果集]
*/
public function my_query($sql) {
// 其实就是调用pdo对象中的exec方法
try{
$result = $this->pdo->exec($sql);
}catch(PDOException $e) {
$this->my_error($e,$sql);
}
return $result;
} /**
* [fetchAll 查询所有]
* @param [string] $sql [sql语句]
* @return [arry] $result [资源结果集]
*/
public function fetchAll($sql) {
// 其实就是调用PDOStatment对象里面的fetchAll方法
try{
$stmt = $this->pdo->query($sql);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 关闭游标,释放结果集
$stmt->closeCursor();
}catch(PDOException $e) {
$this->my_error($e,$sql);
}
return $result;
} /**
* [fetchRow 查询一条]
* @param [string] $sql [sql语句]
* @return [arry] $result [资源结果集]
*/
public function fetchRow($sql) {
// 其实就是调用PDOStatment对象里面的fetch方法
try{
$stmt = $this->pdo->query($sql);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
// 关闭游标,释放结果集
$stmt->closeCursor();
}catch(PDOException $e) {
$this->my_error($e,$sql);
}
return $result;
} /**
* [fetchColumn 查询单行单列]
* @param [string] $sql [sql语句]
* @return [arry] $result [资源结果集]
*/
public function fetchColumn($sql) {
// 其实就是调用PDOStatment对象里面的fetchColumn方法
try{
$stmt = $this->pdo->query($sql);
$result = $stmt->fetchColumn();
// 关闭游标,释放结果集
$stmt->closeCursor();
}catch(PDOException $e) {
$this->my_error($e,$sql);
}
return $result;
}
/**
* [my_prepare sql预处理]
* @param [string] $sql [有占位符的sql语句]
* @param [array] $arr [对象数组]
*/
public function my_prepare($sql,$arr) {
try{
$stmt = $this->pdo->prepare($sql);
$result = $stmt->execute($arr);
}catch(PDOException $e){
$this->my_error($e,$sql);
}
}
/**
* [my_rowCount 查询结果中的总行数]
* @param [string] $sql [有占位符的sql语句]
* @return [string] $count [查询结果的总行数]
*/
public function my_rowCount($sql) {
try{
$stmt = $this->pdo->query($sql);
$count = $stmt->rowCount();
}catch(PDOException $e) {
$this->my_error($e,$sql);
}
return $count;
} /**
* [my_rowCount 获取查询结果中的总列数(总字段数)]
* @param [string] $sql [有占位符的sql语句]
* @return [string] $count [获取查询结果中的总列数(总字段数)]
*/
public function my_columnCount($sql) {
try{
$stmt = $this->pdo->query($sql);
$count = $stmt->columnCount();
}catch(PDOException $e) {
$this->my_error($e,$sql);
}
return $count;
}
/**
* [fetchObject 查询一个对象]
* @param [string] $sql [查询一行的sql语句]
* @return [object] $object [目标对象]
*/
public function fetchObject($sql) {
try{
$stmt = $this->pdo->query($sql);
//$stmt->fetch(PDO::FETCH_BOJ);
$object = $stmt->fetchObject();
}catch(PDOException $e) {
$this->my_error($e,$sql);
}
return $object;
} /**
* [__clone 私有化克隆方法,保护单例模式]
*/
private function __clone() {} /**
* [__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 [属性名]
* @return [string] $name的value [该属性名的值]
*/
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/>";
}
}
封装好的PDO类的更多相关文章
- Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类
Android RecyclerView单击.长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类 我写的附录文章2,介绍了 ...
- Redis操作Hash工具类封装,Redis工具类封装
Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...
- Redis操作字符串工具类封装,Redis工具类封装
Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...
- 一个PDO类
下面是在网上借鉴的一个PDO类: <?php class Database{ private $host = DB_HOST; private $user = DB_USER; private ...
- 【Android】19.3 ContentProvider及安卓进一步封装后的相关类
分类:C#.Android.VS2015: 创建日期:2016-03-08 一.简介 ContentProvider:内容提供程序. Android的ContentProvider与.NET框架的EF ...
- SpringMVC 中,当前台传入多个参数时,可将参数封装成一个bean类
在实际业务场景中,当前台通过 url 向后台传送多个参数时,可以将参数封装成一个bean类,在bean类中对各个参数进行非空,默认值等的设置. 前台 url ,想后台传送两个参数,userName 和 ...
- 第33天:封装自己的class类
封装自己的class类,实现浏览器兼容. <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- Python_selenium封装一个浏览器引擎类
Python_selenium封装一个浏览器引擎类 现在我们在编写一个类,叫浏览器引擎类(此例为:启动浏览器),将文件名命名为browser.py,代码下面通过更改一个字符串的值,运用if语句判断和控 ...
- PHP基于单例模式编写PDO类的方法
一.单例模式简介 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 二.为什么要使用PHP单例模式? 1.php的应用主要在于数据库应用, 所以一个应用中会存在 ...
随机推荐
- MyBatis配置文件(五)--objectFactory对象工厂
我们在使用MyBatis执行查询语句的时候,通常都会有一个返回类型,这个是在mapper文件中给sql增加一个resultType(或resultMap)属性进行控制.resultType和resul ...
- JasperReports报表数据源10
数据源的结构数据容器.同时生成报告,Jasper报表引擎获得来自数据源的数据.数据可以从数据库,XML文件,对象数组和集合中的对象来获得.我们将在本章填充报告所看到的fillReportXXX()方法 ...
- HBase入门实例: Table中Family和Qualifier的关系与区别
Table中Family和Qualifier的关系与区别 就像用MySQL一样,我们要做的是表设计,MySQL中的表,行,列的在HBase已经有所区别了,在HBase中主要是Table和Family和 ...
- mysql建表设置格式
建表时必须设置字段编码格式为COLLATE utf8_bin,表示查询时该字段内容区分大小写,如果不需要区分大小写,可以设置为COLLATE utf8_ genera_ci,表示忽略大小写
- Leetcode520Detect Capital检测大写字母
给定一个单词,你需要判断单词的大写使用是否正确. 我们定义,在以下情况时,单词的大写用法是正确的: 全部字母都是大写,比如"USA". 单词中所有字母都不是大写,比如"l ...
- Java 函数优雅之道
导读 随着软件项目代码的日积月累,系统维护成本变得越来越高,是所有软件团队面临的共同问题.持续地优化代码,提高代码的质量,是提升系统生命力的有效手段之一.软件系统思维有句话“Less coding, ...
- mysql日常sql
重置表 truncate table david_account; 触发器 /* 商户资料更新时更新终端 */ DELIMITER | CREATE TRIGGER bankChange AFTER ...
- LAMP环境搭建和配置(2)
配置httpd 默认虚拟主机 编辑hpptd的主配置文件 搜索httpd-vhost,把行首的#号删除 保存主配置文件,然后编辑虚拟主机配置文件 重新编辑配置段(第一段为默认虚拟主机) ServerA ...
- 在Vmware安装虚拟机WindowsServer 2003
一.创建并安装虚拟机 新建Windows2003server系统 按照下面操作即可 https://www.cnblogs.com/color-blue/p/8525710.html 二.安装虚拟机 ...
- Django--创建
软件开发架构: c/s架构 客户端 服务端 b/s架构 浏览器 服务端 本质:b/s架构也是c/s架构 HTTP协议 超文本传输协议:规定了客户端与服务端之间消息传输的格式 四个特性: 1.基于TCP ...