zoukankan      html  css  js  c++  java
  • PDO(数据访问抽象层)

    自带事务功能,多条sql同时执行时,如果其中一条执行失败,那么所有的都执行失败。
    开启了事务,可以进行回滚操作,让程序变得更安全。

    1.访问不同的数据库
    2.自带事务功能
    3.防止SQL注入:分两次发送

    /*1.造对象
    $dsn = "mysql:dbname=mydb;host=localhost";    //数据源名叫做 dsn
    $pdo = new PDO($dsn,"root","123");
    
    2.写SQL语句
    $sql = "update nation set name='兽族' where code='n013'";
    
    3.执行SQL语句
    $r = $pdo->query($sql);
    $r = $pdo->exec($sql);*/        //exec执行一条sql语句,并返回受影响的行数(增删改)
    
    //事务功能
    //造对象
    $dsn = "mysql:dbname=mydb;host=localhost";
    $pdo = new PDO($dsn,"root","123");
    
    //设置异常模式
    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    
    
    //写SQL语句
    $sql1 = "insert into nation values('n016','人族')";
    $sql2 = "insert into nation values('n017','不死族')";
    
    //执行两条SQL语句
    try            //代表试着执行两句sql语句,如果出现异常,用catch抓住,不交给程序处理
    {
        //启动事务
        $pdo->beginTransaction();
        
        $pdo->exec($sql1);
        $pdo->exec($sql2);
        
        //提交事务
        $pdo->commit();
    }
    catch(PDOException $e)            //catch抓住异常,异常当做参数传过来放到e里面,PDOException是参数类型,里面有个getmessage方法,获取错误信息
    {
        //$e->getMessage();
        //回滚
        $pdo->rollBack();
    }
    final            //最终的意思。 在其他语言中出现,一般用来做数据连接的关闭
    {
        
    }

    防止sql注入攻击(因为它是分两次传送,所以要进行占位)

    问号占位:

    造对象
    $dsn = "mysql:dbname=mydb;host=localhost";
    $pdo = new PDO($dsn,"root","123");
    
    写SQL语句,预处理语句
    $sql = "insert into nation values(?,?)";
    
    准备SQL语句,返回statement对象
    $st = $pdo->prepare($sql);
    
    绑定参数
    /*$st->bindParam(1,$code);
    $st->bindParam(2,$name);
    
    $code="n022";             //绑定完之后可以赋值
    $name="矮人族";*/
    
    $attr = array("n023","魔族");        //简写方法
    
    //提交执行,不用给SQL语句了,已经传过去了
    var_dump($st->execute($attr));
    
    
    //预处理语句里面用?占位的,给数组的时候要给索引数组

    name占位:

    <?php
    
    //造对象
    $dsn = "mysql:dbname=mydb;host=localhost";
    $pdo = new PDO($dsn,"root","123");
    
    //写SQL语句,预处理语句,使用name占位
    $sql = "insert into nation values(:code,:name)";
    
    //准备执行
    $st = $pdo->prepare($sql);
    
    //绑定参数
    /*$st->bindParam(":code",$code,PDO::PARAM_STR);        //$code参数     PDO::PARAM_STR指定参数必须是一个字符串
    $st->bindParam(":name",$name,PDO::PARAM_STR);
    
    $code="n024";
    $name="狼族";*/
    
    $attr = array("code"=>"n025","name"=>"虫族");
    
    //执行
    $st->execute($attr);

    PDO查询:

    <?php
    
    //造对象
    $dsn = "mysql:dbname=mydb;host=localhost";
    $pdo = new PDO($dsn,"root","123");
    
    //写SQL语句,预处理语句
    $sql = "select * from nation";
    
    //准备执行
    $st = $pdo->prepare($sql);
    
    //执行
    $st->execute();            
    
    //读数据
    var_dump($st->fetchAll(PDO::FETCH_ASSOC));        //调用fetch方法是每次读一行。返回关联跟索引数组。里面的参数是选择返回关联或索引数组
    
    
    ?>

    示例:

    简单的登录页面:

    <form action="chuli.php" method="post">
        <input type="text" name="code" />
        <input type="text" name="name" />
        <input type="submit" value="提交" />
    </form>

    使用PDO    name占位方法

    <?php
    //造对象
    $dsn = "mysql:dbname=mydb;host=localhost";
    $pdo = new PDO($dsn,"root","123");
    
    //写SQL语句,预处理语句,使用name占位
    $sql = "insert into nation values(:code,:name)";
    
    //准备执行
    $st = $pdo->prepare($sql);
    
    //执行
    $st->execute($_POST);        //post关联数组 里面有code、name值 
  • 相关阅读:
    openresty开发系列12--lua介绍及常用数据类型简介
    openresty开发系列11--openresty的api入门
    SSD基本工作原理
    SSD 为什么顺序写比随机写性能更好?
    df看到的文件系统容量跟parted看到的分区容量差别较大的解决方法
    DPDK无法分出连续大页面(contiguous hugepages)的几个解决方法
    How to use, monitor, and disable transparent hugepages in Red Hat Enterprise Linux 6
    Examining Huge Pages or Transparent Huge Pages performance
    Notes of O_DIRECT flag
    leveldb
  • 原文地址:https://www.cnblogs.com/u1020641/p/6041457.html
Copyright © 2011-2022 走看看