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 "执行成功";        
    ?>

 

posted @ 2017-05-05 16:24  陈观爱  阅读(375)  评论(0编辑  收藏  举报