对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 从数据库提取二进制图片的处理代码
Sep 09 PHP
php中get_headers函数的作用及用法的详细介绍
Apr 27 PHP
php判断字符串在另一个字符串位置的方法
Feb 27 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
mysql_escape_string()函数用法分析
Apr 25 PHP
php 流程控制switch的简单实例
Jun 07 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
php安全配置记录和常见错误梳理(总结)
Mar 28 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
Jun 09 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 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
十天学会php之第二天
2006/10/09 PHP
简单采集了yahoo的一些数据
2007/02/14 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
介绍Python中内置的itertools模块
2015/04/29 Python
python实现的系统实用log类实例
2015/06/30 Python
Python单链表简单实现代码
2016/04/27 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
MIS软件工程师的面试题
2016/04/22 面试题
求职信的要素有哪些呢
2013/12/26 职场文书
优秀教师事迹简介
2014/02/02 职场文书
调查研究项目计划书
2014/04/29 职场文书
优秀乡村医生事迹材料
2014/05/28 职场文书
英语系本科生求职信
2014/07/15 职场文书
欢迎新生标语2015
2015/07/16 职场文书
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis