对PHP PDO的一些认识小结


Posted in PHP onJanuary 23, 2015

1、PDO(PHP Data Object)扩展为PHP定义了一个访问数据库的轻量、持久的接口。实现PDO接口的每一种数据库驱动都能以正则扩展的形式把各自的特色表现出来。

主要:PDO扩展只是一个抽象的接口层,利用PDO扩展本身并不能实现任何数据库操作,必须使用一个特定的数据库PDO驱动访问数据库

2、启动PDO方法:找到php.ini文件将

;extension=php_pdo.dll

前的分号去掉即可(linux环境下类似)

3、PDO预定义类:

PDO包含了三个预定义类:PDO、PDOStatement、PDOException

(1)PDO类:代表一个PHP和数据库之间的连接

PDO:构造器,创建一个新的PDO对象

beginTransaction:开始事务

commit:提交事务

errorCode:从数据库返回一个错误代号,如果有的话

errorInfo:从数据库返回一个含有错误信息的数组,如果有的话

exec:执行一条SQL语句并返回影响的行数

getAttribute:返回一个数据库的连接属性

lastInsertId:返回最新插入到数据库的行(ID)

prepare:为执行准备一条SQL语句,返回语句执行后的联合结果集

query:执行一条SQL语句并返回结果集

rollBack:回滚一个事务

setAttribute:设置一个数据库连接属性

(2)PDOStatement类:代表一条预处理语句以及语句执行后的联合结果集

bindColomn:绑定一个PHP变量到结果集输出列

bindParam:绑定一个变量到PHP预处理语句中的参数

bindValue:绑定一个值到处理语句中的参数

closeCursor:关闭游标,使语句可以再次执行

cloumnCount:返回结果集中列的数量

errorCode:从语句中返回一个错误代号,如果有的话

errorInfo:从语句中返回包含错误信息的数组

execute:执行一条预处理语句

fetch:从结果集中取出一行

fetchAll:从结果集中取出一个包含所有行的数组

fetchColomn:返回结果集中某一列的数据

getAttribute:返回一个PDOStatement属性

getColomnMeta:返回结果集中某一列的结构

nextRowset:返回下一个结果集

rowCount:返回SQL语句执行后影响的行数

setAttribute:设置一个PDOStatement属性

setFetchMode:为PDOStatement设定获取数据

 

给一个事务处理的简单例子:

<?php

    /*

        事务处理

        MYSQL 表引擎  MyISAM  InnoDB

        添加字段 alter table user add money int not null default 0;

        查看表引擎 show create table user

        修改表引擎 alter table user engine=InnoDB

    */

 

     

    try{

        //实例化PDO

        $pdo=new PDO("mysql:host=localhost;dbname=photo","root","123456"。array('3'=>'2'));

    }catch(PDOException $e){

        echo $e->getMessage();

    }

    //设置字符集

    $sql="set name utf8";

    $pdo->exec($sql);

    //开启事务处理

    $pdo->beginTransaction();

    $num=250;

    $sql="update user set money=money-{$num} where id =1";

    $rows=$pdo->exec($sql);

     

    $sql="update user set monet=money-{$num} where id=2";

    $rows+=$pdo->exec($sql);

    //结束事务处理

    if($rows==2){

        $pdo->commit();

    }else{

        $pdo->rollBack();

    }

?>

(事务的主要特性:原子性、一致性、独立性和持久性)

4、PDO最大的特点是引入了参数绑定和预编译

预编译负责两件事,转移和软解析提速。程序要支持预编译,除了数据库支持外,还需要驱动支持(PDO和NySQLi支持)

5、PDO的效率问题

(1)在一个大表大数据量中进行测试,PDO的CRUD效率比MySql直连低5%~15%,并且方差大于MySQL直连

(2)至于负载方面,PDO开启长连接后负载高于MySQL且比较稳定。

其实在实际应用中,90%的程序是不会进行数据库迁移的,有数据库迁移的应用程序少之又少。

PHP 相关文章推荐
用PHP动态创建Flash动画
Oct 09 PHP
PHP 的 __FILE__ 常量
Jan 15 PHP
PHP教程 变量定义
Oct 23 PHP
php trim 去除空字符的定义与语法介绍
May 31 PHP
初品cakephp 入门基础
Feb 16 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
Jun 12 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
May 13 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
Oct 22 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 PHP
PHP使用PDO调用mssql存储过程的方法示例
Oct 07 PHP
smarty模板引擎中自定义函数的方法
Jan 22 #PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
Jan 22 #PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
Jan 22 #PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 #PHP
smarty模板引擎从php中获取数据的方法
Jan 22 #PHP
smarty模板引擎中变量及变量修饰器用法实例
Jan 22 #PHP
smarty内置函数capture用法分析
Jan 22 #PHP
You might like
图书管理程序(二)
2006/10/09 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
PHP实现简易图形计算器
2020/08/28 PHP
常用简易JavaScript函数
2009/04/09 Javascript
javascript 进度条 实现代码
2009/07/30 Javascript
学习ExtJS Panel常用方法
2009/10/07 Javascript
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
jQuery之尺寸调整组件的深入解析
2013/06/19 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
jQuery实现左右滑动的toggle方法
2018/03/03 jQuery
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
[03:11]2014DOTA2国际邀请赛-VG掉入败者组 独家专访357
2014/07/19 DOTA
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
[43:24]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.12
2020/12/17 DOTA
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
简单介绍python封装的基本知识
2019/08/10 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
摄影专业毕业生求职信
2014/08/05 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书