一、PDO的定义

  1.pdo(php data object)是一个数据库的抽象层

二、PDO的特点

  1.跨数据库

  2.支持预处理

  3.支持事务处理

三、PDO的使用

  1.基本使用

    (1)实例化pdo

      ①数据库类型必须小写

      ②格式:$pdo=new PDO('mysql(可替换):host=localhost;dbname=数据库名;charset=utf8','root','密码');

    (2)发送sql指令

      $pdo->query(sql查询语句)  返回的是对象

      $pdo->exec(sql增、删、改语句)  返回的是手影响行数

    (3)$pdo->errorInfo()  错误信息

      $pdo->lastInsertId()  

  2.处理返回对象的方法

    (1)fetch()返回结果集的下一行,结果指针下移到头返回false

    (2)fetchAll(PDO::FETCH_NUM)返回全部(索引式)    PDO::FETCH_ASSOC关联式      PDO::FETCH_BOTH索引式和关联式

    (3)foreach遍历

  3.预处理

    (1)实例化对象

    (2)发送预处理指令

      $stmt=$pdo->prepare(sql语句,变量部分使用占位符);

      ?  :name  占位符

    (3)绑定参数

      ① ?作为占位符  bindValue(序号,值);

      ② :name作为占位符  bindValue(占位符,变量);

      ③ :name作为占位符  $arr=array('占位符'=>'值');

    (4)执行

      $stmt->execute($arr);

    (5)处理结果

      ① 结果集foreach fetch fetchAll

      ② 受影响行数 rowCount();

 //使用数据库抽象层进行预处理操作

 //1. 实例化
$pdo = new PDO('mysql:host=localhost;dbname=lamp183;charset=utf8','root',''); //2. 发送预处理指令 //增加
$stmt = $pdo->prepare('insert into user (username,password) values (:name,:pass)'); //3. 给预处理指令绑定相应的值
//第一种绑定方式
// $stmt->bindValue(1,'qiaojing');
// $stmt->bindValue(2,'qiaojing'); //第二种绑定方式
// $uname = '鸿泽';
// $upass = '鸿泽';
// $stmt->bindParam(':name',$uname);
// $stmt->bindParam(':pass',$upass); //第三种绑定方式
$arr = array(
':name'=>'召勇',
':pass'=>'召勇'
); //4. 执行
$stmt->execute($arr); //5. 处理结果
if($stmt->rowCount()>0){
$id = $pdo->lastInsertId();
echo '添加成功!ID号为:'.$id;
}else{
echo '添加失败!';
}
// echo $stmt->rowCount();

  4.事务处理

    (1)表的类型必须是innodb

      show create table user;

      alter table user engine=innodb;

    (2)$pdo->beginTransAction();  开启

      $pdo->rollBack();  回滚

        $pdo->commit();  事务结束

 //使用PDO抽象类,实现事务处理
//1.实例化
$pdo = new PDO('mysql:host=localhost;dbname=lamp183;charset=utf8;','root',''); //2.发送语句
//(1)开启事务处理
$pdo->beginTransaction(); //(2)修改我自己的数据
$num1 = $pdo->exec('update user set acount = acount - 100000 where id = 1'); //判断我的修改语句是否有问题
if(!$num1){
$pdo->rollBack(); //如果事务出现问题,则滚回去
die('交易失败,请查询后再转钱!');
} //(3)修改别人的数据
$num2 = $pdo->exec('update user set acount = acount + 100000 where id = 2'); //判断别人的修改语句是否有问题
if(!$num2){
$pdo->rollBack();
die('交易失败!转钱的过程当中遇到了问题!');
} //3.处理结果
if($num1 && $num2){
echo '恭喜,交易成功!';
} //(4)结束
$pdo->commit();

【php】PDO的更多相关文章

  1. 【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项

    我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...

  2. 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

          一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...

  3. 【转】(笔记)CANopen协议【CANFestival】移植方法

    一.背景 CAN组网就必须得要应用层协议,原因就在于 * 便于网络管理与控制 * 确认数据的收发 * 发送大于8个字节的数据块(CAN每帧数据传输大小为8字节) * 为不同节点分配不同的报文标识符 * ...

  4. 【C#】委托与事件

    一.委托 1.概念:用来存放 方法 指针(地址)的容器. 为什么要有委托?当有的业务代码总体已经实现,但有部分需要调用者来决定,就可以使用委托的方式,让调用者把一段代码以 方法的方式 传入. [例子] ...

  5. Linux 下LNMP环境搭建_【all】

    LNMP = Linux + Nginx + Mysql + PHP 1.0 Linux环境搭建 Linux 系统安装[Redhat] 1.1. FastCGI介绍 1.什么是CGI(common g ...

  6. 【转】3年PHPer的面试总结

    [转]3年PHPer的面试总结 算法# 1.反转函数的实现# /** * 反转数组 * @param array $arr * @return array */ function reverse($a ...

  7. 【DVWA】Brute Force(暴力破解)通关教程

    日期:2019-08-01 14:49:47 更新: 作者:Bay0net 介绍:一直以为爆破很简单,直到学习了 Burp 的宏录制和匹配关键词,才发现 burp 能这么玩... 0x01. 漏洞介绍 ...

  8. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  9. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

随机推荐

  1. html5特性简要概括

    1.html5主要的设计目的: 互联网语义化,以便更好地被人类和机器阅读 更好的在移动设备上支持web应用 https://www.w3.org/TR/html5 新增内容: 新的语义标签 <h ...

  2. django 和 七牛云 交互

    django 和 七牛云 交互 七牛开发文档 安装 pip install qiniu 初始化 # access_key 个人中心的 ak # secret_key 个人中心的 sk from qin ...

  3. Flask 请求中间件、错误处理、标签、过滤器、CBV

    目录 一.请求中间件 二.请求中间件额外方法(重写源码) 三.请求错误处理 四.请求标签.过滤器 五.CBV写法 基础版 常用版 一.请求中间件 中间件: 1 before_first_request ...

  4. 使用vue-router+vuex进行导航守卫(转)

    前言:想要实现登录后才能进入主页等其他页面,不然都会跳转到登录页.但是Vuex有个不够完美的地方,一旦刷新页面就会没了,所以还要用到localStorage. 一.router.js: import ...

  5. oracle --游标详解(转)

    转自:http://blog.csdn.net/liyong199012/article/details/8948952 游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定 ...

  6. 免注册公众号的三种微信推送消息服务的C#代码实现

    有时候我们需要监控一些网络上的变化,但是每次去刷新网页却又很麻烦,而且大部分刷新的时候网页并没有更新.那么有没有一个工具,可以监控网页变化,并将变化的结果推送到手机微信上呢? 这里有很多应用场景,比如 ...

  7. React Hook上车

    React Hook 是 v16.8 的新功能,自诞生以来,受到广泛的好评,在 React 版本更新中具有里程碑的意义.现在都2020年了,再不上车 React Hook 就真的 out 了... H ...

  8. 动态网站项目(Dynamic Web Project)登录功能的实现(mvc(五层架构)+jdbc+servlet+tomcat7.0+jdk1.8)(js验证+cookie)

    1.index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" p ...

  9. Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端

    Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端 本文同步更新地址: https://dotnet9.com/11520.html https:// ...

  10. 不同label样本画图——颜色分配plt.cm.Spectral

    不同label样本画图——颜色分配plt.cm.Spectralhttps://blog.csdn.net/wang_zuel/article/details/102940092 关于plt.cm.S ...