对PDO的认识
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%的程序是不会进行数据库迁移的,有数据库迁移的应用程序少之又少。
对PDO的认识的更多相关文章
- 比Mysqli操作数据库更简便的方式 。PDO
下面来说一下PDO 先画一张图来了解一下 mysqli是针对mysql这个数据库扩展的一个类 PDO是为了能访问更多数据库 如果出现程序需要访问其他数据库的话就可以用PDO来做 PDO数据访问抽象层1 ...
- pdo的使用
PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口. PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据. PDO随 ...
- PHP中PDO事务的使用方法
事务 (Transaction) 是操作数据库中很重要的一个功能, 它可以让你预定一条, 或者一系列 SQL 语句, 然后一起执行. 在执行的过程中, 如果其中的某条执行失败, 可以回滚所有已更改的操 ...
- PDO连接mysql数据库
1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...
- PDO概念 分析 练习
PDO 翻译过来叫做数据访问抽象层 它是一个数据访问的层面,实际上是一个类,也就是说所有操作数据库的代码,都是通过这个层面完成的 该图好理解大概就是这样一种模式 现在考虑的是能不能使用同一个类,上层代 ...
- PDO
'PDO'是数据访问抽象层'用mysqli类找到mysqli驱动根据驱动操作mysqli数据库'其他类找到sqlserver驱动根据驱动操作sqlserve数据库'PDO 访问其他数据库 PDO的用法 ...
- 前端学PHP之PDO预处理语句
× 目录 [1]定义 [2]准备语句 [3]绑定参数[4]执行查询[5]获取数据[6]大数据对象 前面的话 本来要把预处理语句和前面的基础操作写成一篇的.但是,由于博客园的限制,可能是因为长度超出,保 ...
- 前端学PHP之PDO基础操作
× 目录 [1]创建PDO [2]使用PDO [3]事务处理 前面的话 PDO(php data object)扩展类库为php访问数据库定义了轻量级的.一致性的接口,它提供了一个数据库访问抽象层,这 ...
- CANopen学习——PDO
查找资料时,发现一个很好的博客,博主剖析的通俗易懂 http://www.cnblogs.com/winshton/p/4897556.html PDO定义: 过程数据对象,用来传输实时数据.因为 ...
- PHP基础之PDO
简介 PDO(PHP Data Object)是指PHP数据对象,它定义了一个轻量级的一致接口来统一操作各种数据库.PDO提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方 ...
随机推荐
- 给定一个数字n,不用for循环实现输出数组 [1,2,3,4,...,n]
一.for循环方式实现输出[1, 2, 3, ..., n] var n = 5; function test(n){ var arr=[]; for( var i = 1; i <= n; i ...
- concurrent.futures 使用及解析
from concurrent.futures import ThreadPoolExecutor, as_completed, wait, FIRST_COMPLETED from concurre ...
- 【BZOJ2287】消失之物 [分治][DP]
消失之物 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description ftiasch 有 N 个物品, ...
- 用例图(Use Case Diagram)
用例图(Use Case Diagram) 执行者/参与者(Actor): 表示与您的应用程序或系统进行交互的用户.组织或外部系统.用一个小人表示. 用例(Use Case): 即系统具有的功能,在用 ...
- ie8下trim失效
1.ie8下使用trim失效 trim可以除去字符串两侧的空白字符,但ie8并不支持 2.解决方案 String.prototype.trim = function () { return this ...
- linux下守护进程的创建
最近在学习linux c编程 看到了守护进程的创建,感觉很好玩, 测试环境ubuntu 15.04 下面贴出测试代码 #include <stdio.h> #include <std ...
- Perl6 Bailador框架(2):路径设置
use v6; use Bailador; =begin pod get表示是get发送 post表示是post发送 get/post 后面的 '/name' 表示是路径 => sub {} 是 ...
- Intel call指令
转载:http://blog.ftofficer.com/2010/04/n-forms-of-call-instructions/ 最近有一个需求,给你个地址,看看这个地址前面是不是一个CALL指令 ...
- python基础===python os.path模块
os.path.abspath(path) #返回绝对路径 os.path.basename(path) #返回文件名 os.path.commonprefix(list) #返回list(多个路径) ...
- spark 环境搭建坑
spark的新人会有什么坑 spark是一个以java为基础的,以Scala实现的,所以在你在安装指定版本的spark,需要检查你用的是对应spark使用什么版本的scala,可以通过spark-sh ...