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注入功能的更多相关文章

  1. C#里面的事物回滚,解决同步数据插入时出现重复数据

    什么是事物回滚: 举个栗子,你在你家的银行分行取钱,取完钱数据要同步,而且可能每个分行都有一个存储这些数据的数据库,分行的这些 存取的记录都需要实时同步,如果你取完500刚好断电了,好嘛,分行可能刚记 ...

  2. 复习课程jdbc:使用配置文件properties进行连接数据库,数据库存取图片,批处理,时间戳,事物回滚等等

    使用配置文件properties进行连接数据库 首先创建一个file自定义文件名,但是后缀名必须改为.properties(不分大小写):如config.properties: 然后双击config. ...

  3. django事物回滚

    往数据库写入数据时,不经意间就会写入不完整的数据,我们称之为脏数据.事务管理(transaction)可以防止这种情况发生.事务管理一旦检测到写入异常,会执行回滚操作,即要么写入完整的数据,要么不写入 ...

  4. ThinkPHP数据库驱动之mysql事物回滚

    1.开启事务方法 startTrans()2.事务提交方法 commit()3.事务回滚方法 rollback() 用法例子: $order = M(‘order’); $allAdded = tru ...

  5. msql,触发器无事物回滚,插入之前满足条件再插入

    很少写mysql的触发器和存储过程,由于需要需要做一个很小的判断,要用到触发器,要达到的效果就是,插入之前判断是否满足条件如果不满足就不插入 如果用sqlserver 或者orcale 就很简单,按s ...

  6. Spring-Java事物回滚失效处理

    spring-Java事物回滚失效处理最近在做项目中,无意间发现有个类在抛事物回滚操作,数据也正常的插入到数据库当中了,于是仔细查看看一下具体原因. 一切还是要从Java的检查型异常和非检查型异常说起 ...

  7. Spring aop切面插入事物回滚

    <!-- tx标签配置 事物--> <tx:advice id="txadvice" transaction-manager="transactionM ...

  8. springboot事物回滚

    要添加事物 必须在方法上添加 @Transactional 注解 如果需要事物回滚有两个条件 1.方法中有异常或者主动抛异常 2.主动去回滚 TransactionAspectSupport.curr ...

  9. peewee 事物 回滚

    peewee 事物 回滚 #!/usr/bin/env python # coding=utf-8 from peewee import * db = MySQLDatabase(host='123. ...

随机推荐

  1. office2010永久的密钥

      1.Office Professional Plus 2010: 6QFDX-PYH2G-PPYFD-C7RJM-BBKQ8 BDD3G-XM7FB-BD2HM-YK63V-VQFDK   2.O ...

  2. CodeForces Round 195 Div2

    A. Vasily the Bear and Triangletime limit per test1 secondmemory limit per test256 megabytesinputsta ...

  3. 关于 Apple Metal API 的一些想法

    在看完 Metal 的开发文档后,除了官方所宣称的一些优点外(比如说更容易理解和使用的 API,更直接和精细的硬件控制,减少 GPU 使用过程中的 CPU 额外开销等等),从我有限的 GLES 开发经 ...

  4. 20145315 《Java程序设计》实验五实验报告

    20145315 <Java程序设计>实验五实验报告 实验五 Java网络编程 我负责服务器部分,王嘉澜负责客户端部分:http://www.cnblogs.com/SJZGM10/p/5 ...

  5. Android 并行自动化测试系统 实现总结

    一:    总体架构 系统工程架构源码:https://github.com/UDLD/UIAUTOMATORTEST 整个系统基于: UiAutomator + 自编Python交互库 + Robo ...

  6. libtiff 生成48位色tif图片

    BOOL CTifImage_48Bits::BitmapConvertTo48BitsTif(CString strImagePath, int nWidth, int nHeight, int n ...

  7. 新浪微博iOS客户端架构与优化之路

    新浪微博iOS客户端架构与优化之路   随着Facebook.Twitter.微博的崛起,向UGC.PGC.OGC,自媒体提供平台的内 容消费型App逐渐形成了独特的客户端架构模式.与电商和通讯工具类 ...

  8. UITextFielddelegate委托方法注释

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{         //返回一个BOOL值,指定是否循序文本字段开始编辑     ...

  9. NSNumber的使用

    1.NSNumber可以表示多种基本数据类型,如int.bool.char.float.double,以及他们加了修饰符long.unsigned的类型.     2.创建方法可以使用numberWi ...

  10. 冒泡排序:一百以内十个随机数放入数组排序并打印<

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...