对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(3)
Oct 09 PHP
fleaphp下不确定的多条件查询的巧妙解决方法
Sep 11 PHP
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
Oct 31 PHP
php 目录与文件处理-郑阿奇(续)
Jul 04 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 PHP
PHP 反射(Reflection)使用实例
May 12 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
Symfony学习十分钟入门经典教程
Feb 03 PHP
PHP Ajax实现无刷新附件上传
Aug 17 PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 PHP
PHP simplexml_import_dom()函数讲解
Feb 03 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
基于mysql的论坛(5)
2006/10/09 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
jQuery 入门讲解1
2009/04/15 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
Node.js如何使用Diffie-Hellman密钥交换算法详解
2017/09/05 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
Python中格式化format()方法详解
2017/04/01 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
python如何调用java类
2020/07/05 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
社区国庆节活动方案
2014/02/05 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
球队口号
2014/06/18 职场文书
2014年纪委工作总结
2014/12/05 职场文书
工程部主管岗位职责
2015/02/12 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
Mysql数据库命令大全
2021/05/26 MySQL