/**

* 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封装类代码(支持事务)相关推荐

  1. php5.5 pdo mysql_PHP5中PDO的简单使用

    PDO(PHP Data Object) 是PHP 5新出来的东西,在PHP 6都要出来的时候,PHP 6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的 ...

  2. php封装pdo实例以及pdo长连接的优缺点

    文章目录 一.前言 二.为什么选择pdo 三.pdo的长连接 1.什么是pdo的长连接 2.长连接对nginx无效吗 3.php-fpm下的长连接测试 4.长连接对事务的影响 5.总结 四.pdo部分 ...

  3. php pdo 关闭,php pdo预处理

    什么是预处理语句? 可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制. 预处理语句可以带来两大好处: 查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次.当 ...

  4. php中的PDO对象---对PDO对象的认识、什么是PDO对象

    注:本报告总结完全由本人编著,部分概念内容由网络摘录 1 对PDO对象的认识 1.1 简介 PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口.实现 PDO 接口的每个数据 ...

  5. PDO::fetchAll 与 PDO::fetch 循环

    只是一个快速的问题. 在循环中使用 PDO::fetchAll() 和 PDO::fetch() 之间是否存在性能差异(对于大型结果集)? 我正在获取用户定义类的对象,如果这有什么不同的话. 我最初未 ...

  6. mysql分页取数每一页生成xml_让MyBatis Generator产生的代码支持分页

    本文提供一种方法,让MyBatis Generator产生的代码支持分页,  适用于MySQL. 分析 如果要获取分页信息,使用MySQL语句,我们需要怎么做呢? select * from t_us ...

  7. fixedBox固定div漂浮代码 支持ie6以上大部分浏览器

    fixedBox固定div漂浮代码 支持ie6以上大部分浏览器 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...

  8. jz2440开发板移植U-boot之修改代码支持DM9000网卡

    今天我们来移植U-boot到jz2440开发板,修改代码支持DM9000网卡.查看之前写的移植记录请点击链接:点击查看之前的移植记录 现在大多数开发板都支持DM9000网卡.我们的U-boot源码里面 ...

  9. 移植uboot之修改代码支持NorFlash记录续集

    接着上一篇文章写的内容(上一篇文章链接:移植uboot之修改代码支持NORFLASH),上一篇结尾测试flash的擦除读写功能,结果无法写flash,卡在了这里: 前面已经擦除成功,这里写内容写不进去 ...

最新文章

  1. python零基础怎么学-python 零基础该怎么学?
  2. 成功解决CondaError: Error reading file, file should be a text file containing packages conda create --he
  3. 编程 小数位数_使用动态编程的n位数的非递减总数
  4. 判断iframe是否加载完成的方法[转]
  5. 遇到IIS configuration error错误的可以看看,不一定是权限问题
  6. Java J2EE中的依赖查找
  7. BERT时代,向量语义检索我们关注什么?
  8. 【Matlab学习笔记】【函数学习】cat函数
  9. atitit.压缩算法 ZLib ,gzip ,zip 最佳实践 java .net php
  10. java 算法 pdf_Java 常用算法手册 PDF扫描版[39MB]
  11. Java基本sql_SQL基本语句
  12. CAD的DXF解析中LWPOLYLINE多线段凸度的相关概念和弧度转换
  13. 数组的正负数分割排序
  14. 织梦模板文件不存在,无法解析文档的最快解决方法
  15. 船舶AIS数据集/船舶历史航行数据集/AIS知识
  16. 大数据元数据管理系统有哪些功能
  17. hadoop不在sudoers文件中。此事将被报告。 解决方法
  18. package,source folder,folder问题
  19. apt 安装 openssl
  20. 比较全的sql表关联图

热门文章

  1. cs架构用什么语言开发_C、C++、Go 语言、Linux服务器开发高级架构师进阶之路
  2. 从零开始学习docker(十二)介绍Docker Compose基本使用
  3. JDK动态代理与CGLIB动态代理区别
  4. 13个知识点,系统整理Python时间处理模块Datetime
  5. 赞!Google 资深软件工程师 LeetCode 刷题笔记首次公开
  6. filezilla 定时上传_FileZilla Server安装教程 - FtpCopy数据自动备份软件(FTP定时备份)|FTP自动下载|FTP自动上传|FTP自动备份...
  7. php软件升级管理系统,POSCMS开源内容管理系统 v3.6.1 升级说明
  8. 学文科的优势_男生学文科有优势吗?
  9. linux文件和目录管理指令,Linux 命令(文件和目录管理 - cat)
  10. linux printk 源码,Printk原理简介