【php】PDO
一、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的更多相关文章
- 【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项
我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...
- 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)
一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...
- 【转】(笔记)CANopen协议【CANFestival】移植方法
一.背景 CAN组网就必须得要应用层协议,原因就在于 * 便于网络管理与控制 * 确认数据的收发 * 发送大于8个字节的数据块(CAN每帧数据传输大小为8字节) * 为不同节点分配不同的报文标识符 * ...
- 【C#】委托与事件
一.委托 1.概念:用来存放 方法 指针(地址)的容器. 为什么要有委托?当有的业务代码总体已经实现,但有部分需要调用者来决定,就可以使用委托的方式,让调用者把一段代码以 方法的方式 传入. [例子] ...
- Linux 下LNMP环境搭建_【all】
LNMP = Linux + Nginx + Mysql + PHP 1.0 Linux环境搭建 Linux 系统安装[Redhat] 1.1. FastCGI介绍 1.什么是CGI(common g ...
- 【转】3年PHPer的面试总结
[转]3年PHPer的面试总结 算法# 1.反转函数的实现# /** * 反转数组 * @param array $arr * @return array */ function reverse($a ...
- 【DVWA】Brute Force(暴力破解)通关教程
日期:2019-08-01 14:49:47 更新: 作者:Bay0net 介绍:一直以为爆破很简单,直到学习了 Burp 的宏录制和匹配关键词,才发现 burp 能这么玩... 0x01. 漏洞介绍 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
随机推荐
- Ubuntu16.04 desktop 设置共享文件夹 -- 图形界面配置
1. 安装 安装samba 直接采用 Ubuntu16.04 desktop 里面的安装向导来完成: 选中需要共享的文件夹 -> 右键 “local Network Share” -> 安 ...
- MySQL 【优化宝典】
概述 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计数据库 ...
- 使用Github Packages功能上传nuget包到Github
前几天微软收购npm的新闻对于软粉来收很是振奋.微软收购npm很可能是为了加强Github Packages.目前Github,Typescript,VSCode,npm这些开源社区的重磅工具全部都在 ...
- 一、create-react-app的安装及使用
一.安装create-react-app 1.在全局环境中安装create-react-app npm install -g create-react-app 2.在您所需要的目录(盘)下生成一个项目 ...
- EPX Studio开发平台简介
大家问我最多的问题就是“EPX 是什么?”“EPX 能够用来做什么?”“EPX 有什么优势?”“EPX 与其它开发平台的区别是什么?” 问题林林总总,总也回答不完,希望通过正文前面的这段文字,来简要回 ...
- 项目部署Django+celery+redis
celery介绍 1.celery应用举例 1.Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以 ...
- 面试官:说说你对css效率的理解
大家好,我是小雨小雨,致力于分享有趣的.实用的技术文章. 内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步. 大家的支持是我创作的动力. 选择器的优先级 众所周知,选择器是有权重 ...
- Android UI性能测试——使用 Gfxinfo 衡量性能
Android官方文档翻译 原文地址:https://developer.android.com/training/testing/performance参考:https://www.jianshu. ...
- angular6 增加webpack配置 亲测可用
核心 Angular Cli 6 禁用了webpack的自定义配置,官方似乎并未提供自定义配置webpack的方法. 在此之前,可以使用ng eject把默认的webpack提取到代码中,进行自定义. ...
- iOS开发:十六进制颜色转UIColor
Objective-C UIColor * __nullable UIColorFromHexValue(NSUInteger hexValue) { CGFloat red = (hexValue ...