php pdo 封装类,php pdo封装类代码(支持事务)
/**
* PDO数据库
* @copyright By GOOGLE
*/
class pdo_db
{
/**
* PDO实例
* @var PDO
*/
protected $_db;
/**
* PDO准备语句
* @var PDOStatement
*/
protected $_stmt;
/**
* 最后的SQL语句
* @var string
*/
protected $_sql;
/**
* 配置信息 $config=array('dsn'=>xxx,'name'=>xxx,'password'=>xxx,'option'=>xxx)
* @var array
*/
protected $_config;
/**
* 构造函数
* @param array $config
*/
public function __construct($config)
{
$this->_config = $config;
}
/**
* 连接数据库
* @return void
*/
public function connect()
{
$this->_db = new PDO($this->_config['dsn'], $this->_config['name'], $this->_config['password'], $this->_config['option']);
//默认把结果序列化成stdClass
// $this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
//自己写代码捕获Exception
$this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
}
/**
* 断开连接
* @return void
*/
public function disConnect()
{
$this->_db = null;
$this->_stmt = null;
}
/**
* 执行sql,返回新加入的id
* @param string $statement
* @return string
*/
public function exec($statement)
{
if ($this->_db->exec($statement)){
$this->_sql = $statement;
return $this->lastId();
}
$this->errorMessage();
}
/**
* 查询sql
* @param string $statement
* @return pdo_db
*/
public function query($statement)
{
$res = $this->_db->query($statement);
if ($res){
$this->_stmt = $res;
$this->_sql = $statement;
return $this;
}
$this->errorMessage();
}
/**
* 序列化一次数据
* @return mixed
*/
public function fetchOne()
{
return $this->_stmt->fetch();
}
/**
* 序列化所有数据
* @return array
*/
public function fetchAll()
{
return $this->_stmt->fetchAll();
}
/**
* 最后添加的id
* @return string
*/
public function lastId()
{
return $this->_db->lastInsertId();
}
/**
* 影响的行数
* @return int
*/
public function affectRows()
{
return $this->_stmt->rowCount();
}
/**
* 预备语句
* @param string $statement
* @return pdo_db
*/
public function prepare($statement)
{
$res = $this->_db->prepare($statement);
if ($res){
$this->_stmt = $res;
$this->_sql = $statement;
return $this;
}
$this->errorMessage();
}
/**
* 绑定数据
* @param array $array
* @return pdo_db
*/
public function bindArray($array)
{
foreach ($array as $k => $v){
if (is_array($v)){
//array的有效结构 array('value'=>xxx,'type'=>PDO::PARAM_XXX)
$this->_stmt->bindValue($k + 1, $v['value'], $v['type']);
} else{
$this->_stmt->bindValue($k + 1, $v, PDO::PARAM_STR);
}
}
return $this;
}
/**
* 执行预备语句
* @return bool
*/
public function execute()
{
if ($this->_stmt->execute()){
return true;
}
$this->errorMessage();
}
/**
* 开启事务
* @return bool
*/
public function beginTransaction()
{
return $this->_db->beginTransaction();
}
/**
* 执行事务
* @return bool
*/
public function commitTransaction()
{
return $this->_db->commit();
}
/**
* 回滚事务
* @return bool
*/
public function rollbackTransaction()
{
return $this->_db->rollBack();
}
/**
* 抛出错误
* @throws Error
* @return void
*/
public function errorMessage()
{
return;
$msg = $this->_db->errorInfo();
throw new Exception('数据库错误:' . $msg[2]);
}
//---------------------
/**
* 单例实例
* @var pdo_db
*/
protected static $_instance;
/**
* 默认数据库
* @static
* @param array $config
* @return pdo_db
*/
public static function instance($config)
{
if (!self::$_instance instanceof pdo_db){
self::$_instance = new pdo_db($config);
self::$_instance->connect();
}
return self::$_instance;
}
//----------------------
/**
* 获取PDO支持的数据库
* @static
* @return array
*/
public static function getSupportDriver(){
return PDO::getAvailableDrivers();
}
/**
* 获取数据库的版本信息
* @return array
*/
public function getDriverVersion(){
$name = $this->_db->getAttribute(PDO::ATTR_DRIVER_NAME);
return array($name=>$this->_db->getAttribute(PDO::ATTR_CLIENT_VERSION));
}
}
php pdo 封装类,php pdo封装类代码(支持事务)相关推荐
- php5.5 pdo mysql_PHP5中PDO的简单使用
PDO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的 ...
- php封装pdo实例以及pdo长连接的优缺点
文章目录 一.前言 二.为什么选择pdo 三.pdo的长连接 1.什么是pdo的长连接 2.长连接对nginx无效吗 3.php-fpm下的长连接测试 4.长连接对事务的影响 5.总结 四.pdo部分 ...
- php pdo 关闭,php pdo预处理
什么是预处理语句? 可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制. 预处理语句可以带来两大好处: 查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次.当 ...
- php中的PDO对象---对PDO对象的认识、什么是PDO对象
注:本报告总结完全由本人编著,部分概念内容由网络摘录 1 对PDO对象的认识 1.1 简介 PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口.实现 PDO 接口的每个数据 ...
- PDO::fetchAll 与 PDO::fetch 循环
只是一个快速的问题. 在循环中使用 PDO::fetchAll() 和 PDO::fetch() 之间是否存在性能差异(对于大型结果集)? 我正在获取用户定义类的对象,如果这有什么不同的话. 我最初未 ...
- mysql分页取数每一页生成xml_让MyBatis Generator产生的代码支持分页
本文提供一种方法,让MyBatis Generator产生的代码支持分页, 适用于MySQL. 分析 如果要获取分页信息,使用MySQL语句,我们需要怎么做呢? select * from t_us ...
- fixedBox固定div漂浮代码 支持ie6以上大部分浏览器
fixedBox固定div漂浮代码 支持ie6以上大部分浏览器 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
- jz2440开发板移植U-boot之修改代码支持DM9000网卡
今天我们来移植U-boot到jz2440开发板,修改代码支持DM9000网卡.查看之前写的移植记录请点击链接:点击查看之前的移植记录 现在大多数开发板都支持DM9000网卡.我们的U-boot源码里面 ...
- 移植uboot之修改代码支持NorFlash记录续集
接着上一篇文章写的内容(上一篇文章链接:移植uboot之修改代码支持NORFLASH),上一篇结尾测试flash的擦除读写功能,结果无法写flash,卡在了这里: 前面已经擦除成功,这里写内容写不进去 ...
最新文章
- python零基础怎么学-python 零基础该怎么学?
- 成功解决CondaError: Error reading file, file should be a text file containing packages conda create --he
- 编程 小数位数_使用动态编程的n位数的非递减总数
- 判断iframe是否加载完成的方法[转]
- 遇到IIS configuration error错误的可以看看,不一定是权限问题
- Java J2EE中的依赖查找
- BERT时代,向量语义检索我们关注什么?
- 【Matlab学习笔记】【函数学习】cat函数
- atitit.压缩算法 ZLib ,gzip ,zip 最佳实践 java .net php
- java 算法 pdf_Java 常用算法手册 PDF扫描版[39MB]
- Java基本sql_SQL基本语句
- CAD的DXF解析中LWPOLYLINE多线段凸度的相关概念和弧度转换
- 数组的正负数分割排序
- 织梦模板文件不存在,无法解析文档的最快解决方法
- 船舶AIS数据集/船舶历史航行数据集/AIS知识
- 大数据元数据管理系统有哪些功能
- hadoop不在sudoers文件中。此事将被报告。 解决方法
- package,source folder,folder问题
- apt 安装 openssl
- 比较全的sql表关联图
热门文章
- cs架构用什么语言开发_C、C++、Go 语言、Linux服务器开发高级架构师进阶之路
- 从零开始学习docker(十二)介绍Docker Compose基本使用
- JDK动态代理与CGLIB动态代理区别
- 13个知识点,系统整理Python时间处理模块Datetime
- 赞!Google 资深软件工程师 LeetCode 刷题笔记首次公开
- filezilla 定时上传_FileZilla Server安装教程 - FtpCopy数据自动备份软件(FTP定时备份)|FTP自动下载|FTP自动上传|FTP自动备份...
- php软件升级管理系统,POSCMS开源内容管理系统 v3.6.1 升级说明
- 学文科的优势_男生学文科有优势吗?
- linux文件和目录管理指令,Linux 命令(文件和目录管理 - cat)
- linux printk 源码,Printk原理简介