封装好的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的应用主要在于数据库应用, 所以一个应用中会存在 ...
随机推荐
- 转载 ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(一) 整理基础数据
ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(一) 整理基础数据 最近碰巧发现一款比较好的Web即时通讯前端组件,layim,百度关键字即可,我下面要做的就是基于这个前 ...
- 前端存取cookie
1.存cookie document.cookie="user_phone="+loginMake1Value;//存手机号码cookie//'user_phone'为cookie ...
- css背景属性整理
背景颜色 {background-color:red}/*常用十六进制颜色#fff*/ 图片 {background-image:url();} /*插入图片路径*/ 重复 {background-r ...
- JDBC工具类-DButils(QueryRunner-ResultSetHandler)
简述: DBUtils是Java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码. DBUtils三个核心功能: QUeryRunne ...
- PyCharm在同一个包(package)下,如何把一个.py文件导入另外一个.py文件下
PyCharm在同一个包(package)下,如何把一个.py文件导入另外一个.py文件下 在同一个包下只需要用import 掉以后就可以找到模块所在的位置,但是如果不在同一个包下,在需要返回父级调用 ...
- spring源码学习之springMVC(一)
个人感觉<Spring技术内幕:深入解析Spring架构与设计原理(第2版)>这本书对spring的解读要优于<Spring源码深度解析(第2版)>这本书的,后者感觉就是再陈述 ...
- TZ_16_Vue父子组件之间的通信
1.父向子传递props,该如何传递 <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- []==![] 为什么等于true?
最近碰到这样一个问题: []==![] 为什么等于true? 首先分析 !的优先级较==高,先运算==两侧的操作数: typeof []; //"object" typeof ...
- beego 批量删除问题
o := orm.NewOrm() qs := o.QueryTable(new(ExecutionJobs)) javaTimestamp = 1557738394000 qs = ...
- 码云及git使用
首次使用码云,将本地文件与之关联(创建仓库之后的页面截图) git -- 版本控制(协同开发软件) git add . # 将当前文件下所有内容添加到临时缓存区 git commit -m " ...