首页 > 代码库 > PDO(数据访问抽象层)、pdo事务功能和预处理功能---2017-05-05

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="http://www.mamicode.com/添加" />        </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 "执行成功";            ?>

 

PDO(数据访问抽象层)、pdo事务功能和预处理功能---2017-05-05