php数据访问:pdo用法、事物回滚功能和放sql注入功能
PDO:
一、含义:
数据访问抽象层
二、作用
通过PDO能够访问其它的数据库
三、 用法:
1.造对象
① $pdo = new PDO($dsn,$username,$passwd)
② DSN:数据源名称 , mysql:host=localhost;dbname=mydb;
2.执行SQL语句
① $pdo -> exec(): 用来处理非结果集的,返回影响的行数
② $pdo -> query() :用来处理有结果集的语句
四、预处理
①$stmt = $pdo -> prepare(SQL语句) : 将SQL语句放到服务器上等待执行
②$stmt -> execute(); :执行准备好的SQL语句
③SQL语句中参数用?代替
Ⅰ. insert into users(name, pass, age, sex, email) values(?, ?, ?, ?, ?)
Ⅱ. $stmt -> bindParam(1, $name); -> 将变量绑定给参数
Ⅲ. $name = "admin"; -> 给变量赋值
Ⅳ. $stmt -> execute(); -> 执行
Ⅴ. $stmt -> execute(array("meizi", '123456', 18, 'nv', 'aa@bb.com')); -> 简单方法(推荐)
④SQL语句中参数用字符串代替
Ⅰ. insert into users(name, pass, age, sex, email) values(:name, :pass, :age, :sex, :email)
Ⅱ. $stmt -> bindParam("name", $name, PDO::PARAM_STR); -> 将变量绑定给参数
Ⅲ. $name = "admin"; -> 给变量赋值
Ⅳ. $stmt -> execute(); -> 执行
Ⅴ. $stmt -> execute(array("name"=>"feng", "pass"=>"abc123#", "age"=>28, "sex"=>"nan", "email"=>"aaa@bbb.com")); -> 简单方法(推荐)
<body>
<?php

//1.造对象、执行sql语句
$dsn = "mysql:dbname=text_zuoye;host=localhost";
$pdo = new PDO($dsn,"root","2786802");
$sql = " update nation set name ='兽族' where code ='n004'";
$attr = $pdo->exec($sql);//可以执行增删改
//2.事物功能
$dsn = "mysql:dbname=text_zuoye;host=localhost";
$pdo = new PDO($dsn,"root","2786802");
//设置异常模式:作用是如果出现错误,不出现错误信息,抛个异常出来
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//写sql语句
$sqla = "insert into nation values('n005','人族')";
$sqlb = "insert into nation values('n006','精灵族')";
//执行sql语句:试着执行两条语句,如发现异常,抓住,不交给php,人为处理
try
{
$pdo->exec($sqla);
$pdo->exec($sqlb);
}
catch(PDOException $e)//抓住异常之后,自己出一个信息,如果返回一个异常,catch抓住之后,异常保存在变量$e里面,通过$e调用一个方法:$e->getMessage()来获取错误信息,如果错误,可以echo"友好信息"
{
$e->getMessage();
}
/*final//无论try里面的信息是否出错,都要执行final里面的内容
{
}*/
//如何启动事物
try
{
$pdo->beginTransaction();//启动事物(开始)
$pdo->exec($sqla);//中间所有代码都是事物
$pdo->exec($sqlb);
$pdo->commit();//提交事务,如果发现有错,抛异常(结束)
}
catch(PDOException $e)
{
$pdo->rollBack();//如果有错误,执行回滚,两条语句同时执行,如果$sqla执行成功,且加入数据库,但是$sqlb不成功的话,catch抓住,执行回滚操作,加上的$sqla删除,可以让程序更加安全
//$e->getMessage();//如果没有错误,执行此语句
}
?>
<?php
//3.防止注入功能,分两次给数据例如:第一次给$sql='select *from nation where code = ''',第二次给'n001'
$dsn = "masql:dbname=text_zuoye;host=localhost";
$pdo = new PDO($dsn,"root","2786802");
//?占住位置,学名是预处理语句
$sql = " insert into nation values(?,?)";
//准备sql语句,返回一个statement对象
$st = $pdo->prepare($sql);
//绑定参数方法一:
$st->bindParam(1,$code);//1是索引,$code是一个变量名
$st->bindParam(2,$name);
//给变量赋值,在绑定参数上边或者下边赋值都行
$code="n007";
$name = "矮人族";
//提交执行,不用给sql语句,已经传过去了,布尔型,成功true,失败false
$st->execute();
//绑定参数方法二:
$attr = array("n007","矮人族");
$st->execute($attr);
//预处理语句里面用?占位的,给数组的时候要给索引数组,给的数据顺序要对应起来
//name占住位置,学名是预处理语句
$sql = " insert into nation values(:code,:name)";
//准备执行
$st = $pdo->exec($sql);
//绑定参数 方法一:
$st->bindParam(":code",$code,PDO::PARAM_STR);//指定¥code必须为字符串
$st->bindParam(":name",$name,PDO::PARAM_STR);
$code = "n009";
$name = "狼族";
//执行
$st->execute();
//绑定参数 方法二:
$attr = array("code"=>"noo9","name"=>"虫族");
//PDO查询:
$sql = "select * from nation ";
$st = $pdo->prepare($sql);
$st->execute();
var_dump($st->fetchAll());
$st->fetch();//返回一个关联加索引的数组
$st->fetchAll()//返回一个关联加索引的数组
?>
</body>
php数据访问:pdo用法、事物回滚功能和放sql注入功能的更多相关文章
- C#里面的事物回滚,解决同步数据插入时出现重复数据
什么是事物回滚: 举个栗子,你在你家的银行分行取钱,取完钱数据要同步,而且可能每个分行都有一个存储这些数据的数据库,分行的这些 存取的记录都需要实时同步,如果你取完500刚好断电了,好嘛,分行可能刚记 ...
- 复习课程jdbc:使用配置文件properties进行连接数据库,数据库存取图片,批处理,时间戳,事物回滚等等
使用配置文件properties进行连接数据库 首先创建一个file自定义文件名,但是后缀名必须改为.properties(不分大小写):如config.properties: 然后双击config. ...
- django事物回滚
往数据库写入数据时,不经意间就会写入不完整的数据,我们称之为脏数据.事务管理(transaction)可以防止这种情况发生.事务管理一旦检测到写入异常,会执行回滚操作,即要么写入完整的数据,要么不写入 ...
- ThinkPHP数据库驱动之mysql事物回滚
1.开启事务方法 startTrans()2.事务提交方法 commit()3.事务回滚方法 rollback() 用法例子: $order = M(‘order’); $allAdded = tru ...
- msql,触发器无事物回滚,插入之前满足条件再插入
很少写mysql的触发器和存储过程,由于需要需要做一个很小的判断,要用到触发器,要达到的效果就是,插入之前判断是否满足条件如果不满足就不插入 如果用sqlserver 或者orcale 就很简单,按s ...
- Spring-Java事物回滚失效处理
spring-Java事物回滚失效处理最近在做项目中,无意间发现有个类在抛事物回滚操作,数据也正常的插入到数据库当中了,于是仔细查看看一下具体原因. 一切还是要从Java的检查型异常和非检查型异常说起 ...
- Spring aop切面插入事物回滚
<!-- tx标签配置 事物--> <tx:advice id="txadvice" transaction-manager="transactionM ...
- springboot事物回滚
要添加事物 必须在方法上添加 @Transactional 注解 如果需要事物回滚有两个条件 1.方法中有异常或者主动抛异常 2.主动去回滚 TransactionAspectSupport.curr ...
- peewee 事物 回滚
peewee 事物 回滚 #!/usr/bin/env python # coding=utf-8 from peewee import * db = MySQLDatabase(host='123. ...
随机推荐
- 驱动模式使用__try __excpet
内核模式下判断内存可读可写(下面两个函数是判断ring3的内存.我也搞不懂有啥用) VOID ProbeForRead( IN CONST VOID *Address, IN SIZE_T Lengt ...
- Hark的数据结构与算法练习之煎饼排序
算法说明 假设煎锅里边有N个煎饼摞在了一起,它们大小不一并且顺序不一致,我们需要通过拿铲子将它们不停的翻个,进行排序,最终得到一个底下是大的煎饼,上边是小的煎饼的序列.这个排序的过程就是煎饼排序. 这 ...
- javascript优化--04高质量编码
库和API的设计: 在参数设计中保持好的习惯:如顺序,width,height;top,right,bottom,left;如命名: 将undefined看作没有值而不要表示非特定的值: 在允许0,空 ...
- js:语言精髓笔记7----原型继承
面向对象有三个基本特性:封装,继承,多态:如果都满足的话称为面向对象语言:而部分满足则称为基于对象语言: 数据类型实现模型描述: JavaScript对象模型: 构造过程:函数->构造器 构造器 ...
- mysql之对视图的操作
1. 为什么要使用视图? 为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性.所谓视图,本质上是一种虚拟表,在物理上是不存在的,其内容与真实的表相似,包含一系列带有 ...
- WebRTC手记之框架与接口
转载请注明出处:http://www.cnblogs.com/fangkm/p/4370492.html 上一篇文章简单地介绍了下WebRTC的协议流程,这一篇就开始介绍框架与接口. 一提到框架,本能 ...
- HDU 4666 Hyperspace(曼哈顿距离)
题目链接 这是HDU第400个题. #include <cstdio> #include <cstring> #include <set> #include < ...
- SqlServer主键外键添加及判断表是否存在
GO --判断表是否存在方式1 if object_id(N'EF_User',N'U') is null --判断表是否存在方式2 --if not exists (select * from db ...
- 定时任务之Spring与Quartz的整合(有修改)
转摘:http://www.javaweb1024.com/java/JavaWebzhongji/2015/04/13/548.html 在Spring中使用Quartz有两种方式实现:第一种是任务 ...
- CKEditor实现图片上传
本人用的CKEditor版本为4.3 CKEditor配置和部署参考CKEditor4.x部署和配置. CKEditor编辑器的工具栏中初始的时候应该是这样子的,没有图片上传按钮 并且预览中有一堆火星 ...