【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 ...
随机推荐
- DevOps - 持续集成
最近在担任公司部门的DevOps Champion的角色,一直觉得这个只是一个协调者的角色(而不是一个SME的角色),我的工作大概就是将每个项目的devops工具收集一下,然后用图表的形式去体现大家用 ...
- linux中的源码安装
前两天自己在笔记本上装了CentOs版本的虚拟机,接着要装Python3,是源码安装的挺费劲,个人总结了一些源码安装的经验,今天在这里给大家分享一下. 1. 首先准备环境,安装必要的编译工具gcc g ...
- Vue2.0 【第二季】第5节 Template制作模板
目录 Vue2.0 [第二季]第5节 Template制作模板 第5节 Template制作模板 一.直接写在选项里的模板 二.写在template标签里的模板 三.写在script标签里的模板 Vu ...
- 使用GUI工具Portainer.io管控Docker容器
背景 5年前容器技术扑面而来,如今已经成为面向云原生开发的基础架构,基于微服务的设计需要部署大量容器,同时强调了友好快速的管理容器. 是时候推荐一个轮子Portainer.io:提供GUI界面的容器管 ...
- QT使用信号量QSemaphore处理大量数据
实现如下:
- 测试必知必会系列- Linux常用命令 - cd
21篇测试必备的Linux常用命令,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1672457.html 如何进 ...
- watch 同步表单 记得$nextTick,否则不会同步更新到组件内
watch 同步表单 记得$nextTick,否则不会同步更新到组件内 watch: { 'formData.aaa' (val) { this.$nextTick(() => { this.f ...
- 为了弄懂Flutter的状态管理, 我用10种方法改造了counter app
为了弄懂Flutter的状态管理, 我用10种方法改造了counter app 本文通过改造flutter的counter app, 展示不同的状态管理方法的用法. 可以直接去demo地址看代码: h ...
- Java-正则表达式(新手)
/* 正则表达式也是一个字符串,用来定义匹配规则,在Pattern类中有简单的规则定义.可以结合字符串类的方法使用. *///创建的一个类.public class LianxiFF1 { //公共静 ...
- [Microsoft Teams]使用连接器接收Azure Devops的通知
1. 什么是连接器 连接器(connector)是Teams中频道的一个接受消息的功能,官方的解释如下: 连接器允许用户订阅来自 web 服务的接收通知和消息. 它们公开服务的 HTTPS 终结点,通 ...