zoukankan      html  css  js  c++  java
  • PDO(数据访问抽象层)、pdo事务功能和预处理功能---2017-05-05

    之前所学的数据访问都是用mysqli做成类来访问的,但是mysqli这个类只是针对mysql这个数据库的;那么如果访问其他类型的数据库呢?

    那么这就用到了PDO(数据访问抽象层)。

    一、关于PDO基本语句(以MySQL数据库为例,因为电脑没有其他的数据库)

    (1)造PDO对象

    $dsn = "mysql:dbname=mydb;host=localhost"; 
    $pdo = new PDO($dsn,"root","123");

    格式:

    $dsn = "数据库;地址"; 
    $pdo = new PDO(数据源,用户,密码);

    (2)写SQL语句

    $sql = "select * from info";
    $sql = "update info set name='张三' where code='p001'";

    (3)执行SQL语句,返回PDOSTATEMENT对象

    查询:

    $stm = $pdo->query($sql);

    增删改:

    $arr = $pdo->exec($sql);

    (4)读数据

    $arr = $stm->fetch(PDO::FETCH_NUM);
    $arr = $stm->fetchAll(PDO::FETCH_ASSOC);

    注:

    PDO::FETCH_ASSOC:返回关联数组
    PDO::FETCH_NUM:返回索引数组
    PDO::FETCH_BOTH:返回关联和索引数组

    二、事务功能 (实现几个sql语句的一起操作,要操作成功都成功,要失败都失败)

    <?php
    $dsn = "mysql:dbname=mydb;host=localhost";
    $pdo = new PDO($dsn,"root","123");
    
    
    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    
    
    try
    {
        //开启事务功能
        $pdo->beginTransaction();
        
        $sql1 = "insert into nation values('n016','是是')"; 
        $sql2 = "insert into nation values('n019','是是')"; 
        $sql3 = "insert into nation values('n018','是是')"; 
        
        $pdo->exec($sql1);
        $pdo->exec($sql2);
        $pdo->exec($sql3);
        
        //提交事务
        $pdo->commit();
    }
    //捕获异常并解决异常
    catch(Exception $e)
    {
        
        //回滚
        $pdo->rollBack();
    }
    
    ?>

    三、预处理功能

    第一种预处理方式:(索引数组方式)

        <?php
        $dsn = "mysql:dbname=hw_0408;host=localhost";
        $pdo = new PDO($dsn,"root","123");
        
        //第一种预处理方式
        $sql = "insert into nationality values (?,?)";
    
        
        //将预处理语句发送到服务器等待执行,返回pdostatement对象。
        $stm = $pdo->prepare($sql);
        
        //对应第一种预处理方式的
        $arr = array("12","很可观的");
        
        $stm->execute($arr);
        echo "执行成功";
                
        ?>
        

    第二种预处理方式:(关联数组方式)   这种方式好用~

        <?php
        $dsn = "mysql:dbname=hw_0408;host=localhost";
        $pdo = new PDO($dsn,"root","123");
        
    
        //第二种预处理方式
        $sql = "insert into nationality values (:mzcode,:nationality)";
        
        //将预处理语句发送到服务器等待执行,返回pdostatement对象。
        $stm = $pdo->prepare($sql);
        
        
        //对应第二种预处理方式的
        $arr = array("mzcode"=>"14","nationality"=>"想在哪看过");
        
        $stm->execute($arr);
        echo "执行成功";
                
        ?>
        

    四、第二种预处理方式的例子

    添加页面:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <form method="post" action="chuli.php">
            <div>代号:<input type="text" name="code" /></div>
            <div>民族:<input type="text" name="nation" /></div>
            <input type="submit" value="添加" />
            </form>
        </body>
    </html>

    处理过程:

    <?php
        $dsn = "mysql:dbname=hw_0408;host=localhost";
        $pdo = new PDO($dsn,"root","123");
        $sql = "insert into nationality values (:code,:nation)";
        $stm = $pdo->prepare($sql);
           //$_POST取出的数组正好是关联数组,所以可以直接用
        $stm->execute($_POST);
        echo "执行成功";        
        ?>
  • 相关阅读:
    linux mint 安装 SecureCRT
    Openstack 在VMware虚拟机ESXI和Workstation下安装需要更改参数
    应该了解的Openstack命令
    OpenStack网络详解
    qcow2、raw、vmdk等镜像格式
    OpenStack入门之【OpenStack-havana】之单网卡-All In One 安装(基于CentOS6.4)
    mint下截图工具shutter的安装和使用设置
    win10 与linux mint双系统 只能进入mint而无法进入windows的解决方案
    Linux mint 亮度调节
    linux中删除文件名称乱码
  • 原文地址:https://www.cnblogs.com/chenguanai/p/6813621.html
Copyright © 2011-2022 走看看