一、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. 有了这套微信小程序x5调试,调试一些简单的开发者工具调试不了的功能不成问题!!!!

    1.首先我们需要打开微信 TBS 调试 地址是:http://debugx5.qq.com 2.然后打开手机 打开开发者模式,打开 USB 调试 3.然后 在谷歌浏览器地址栏输入 chrome://i ...

  2. Vue2.0 【第一季】第2节 v-if v-else v-show 指令

    目录 Vue2.0 [第一季]第2节 v-if v-else v-show 指令 第二节 v-if v-else v-show 指令 2.1 v-if指令.v-else指令: 2.2 v-show的使 ...

  3. CentOS系统python默认版本由python2改为python3

    一.了解 CentOS中如果安装有yum,一般会有python2的某个版本.命令行键入python,出现的python2的环境: [root@instance-hrnebyqu src]# pytho ...

  4. go极其ide的安装

    一.下载软件开发包 官网:https://golang.google.cn/ 二.   安装和配置SDK windows使用.msi一键安装 配置环境变量 GOROOT,自动的,默认将go安装到C:/ ...

  5. 手动搭建webpack + vue项目之初体验

    在使用vue做开发时,大部分人只会使用官方提供的脚手架搭建项目,脚手架虽然很好用,但想要成为一名优秀的前端开发者,webpack这一道坎是绕不开的,所以我们要学会脱离脚手架,利用webpack手动搭建 ...

  6. PPP协议(简述)

    PPP协议(链路层协议):用于点对点信道.互联网用户通常需要连接到某个ISP(运营商)之后才能接入到互联网,PPP协议是用户计算机和ISP(运营商)进行通信时所使用的数据链路层协议.该协议可支持同一时 ...

  7. C++:利用全局钩子实现键盘锁

    在家看网课,记笔记不方便.于是就想弄个键盘锁,方便学习(在寝室也好把外接键盘放上去打游戏). 其实这东西挺简单的,就三行代码. HHOOK hk; LRESULT CALLBACK kbproc(in ...

  8. Linux常用命令总结(一)

    一.cd命令 用于切换当前目录,类似与win的命令.它可以切换到绝对路径,也可以是相对路径. cd  /root/Doce  # 切换到绝对路径/root/Doce目录下 cd ./path  # 切 ...

  9. System.Text.Json 序列化对所有 JSON 属性名称使用 camel 大小写

    asp.net core3.x 新增的序列号接口System.Text.Json 序列化时,如果要对所有 JSON 属性名称使用 camel 大小写 将 JsonSerializerOptions.P ...

  10. Log4j模板

    log4j.rootLogger=DEBUG, A1,A2 log4j.appender.A1.MaxFileSize=1kb #10个备份 log4j.appender.A1.MaxBackupIn ...