对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入门的学习方法
Jan 02 PHP
PHP 开源框架22个简单简介
Aug 24 PHP
PHP 冒泡排序算法的实现代码
Aug 08 PHP
php include加载文件两种方式效率比较
Aug 08 PHP
php删除文件夹及其文件夹下所有文件的函数代码
Jan 23 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
php实现执行某一操作时弹出确认、取消对话框
Dec 30 PHP
php读取大文件示例分享(文件操作类)
Apr 13 PHP
php中函数前加&amp;符号的作用分解
Jul 08 PHP
php实现插入排序
Mar 29 PHP
mac下多个php版本快速切换的方法
Oct 09 PHP
php静态成员方法和静态的成员属性的使用方法
Oct 26 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中GET变量的使用
2006/10/09 PHP
安装APACHE
2007/01/15 PHP
php简单提示框alert封装函数
2010/08/08 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
js的三种继承方式详解
2017/01/21 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
Node.js自定义实现文件路由功能
2017/09/22 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
Django项目后台不挂断运行的方法
2019/08/31 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
python hash每次调用结果不同的原因
2019/11/21 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
2020/06/06 Python
简述 Python 的类和对象
2020/08/21 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
大学毕业后的十年规划
2014/01/07 职场文书
岗位职责说明书
2014/05/07 职场文书
员工安全承诺书
2014/05/22 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python