zoukankan      html  css  js  c++  java
  • PDO概念及总结

    为什么要讲PDO:

    (1)市面上使用最多的,大部分企业使用PDO

    (2)Mysqli  只支持mysql数据库,PDO支持大部分数据库

    (3)以后做的项目都是使用PDO作为数据库抽象层来实现的

    mysqli------是mysql数据库的加强:

    (预处理机制)

    (错误处理机制)

    (采用了面向对象的编程模式)

    一、PHP如何操作数据库

    与具体数据库的扩展:php想操作那个数据库,需要开启这个数据库的扩展,提供操作这个数据库的函数

    二、什么是PDO

    PDO是一个mysql官方封装的,基于面向对象编程思想的,使用c语言开发的数据库抽象层

    三、PDO数据库抽象的概念:

    PDO抽象类

    它是封装的一个类,就是一个控制数据库的新的操作方法

    将具体的操作数据库的代码封装到数据库抽象层,如果出项数据库转移,只需在php代码里高速数据库抽象层,你去使用哪一个数据库就可以了

    通过代码引出PDO

    <?php

      //写一个函数,根据传递的参数来操作不同的数据库

      function mysql_db($type){

        if($type=='mysql'){

            mysql_connect();

            mysql_select_db();

        }elseif ($type=='mssql'){

            mssql_connect();

            mssql_query();

        }elseif ($type=='oracle'){

            // 具体操作某个数据库的函数

        }

      }

      mysql_db('mysql');

      function mysql_q($type,$sql){

        if($type=='mysql'){

            mysql_query($sql);

        }

      }

    ?>

    一、     如何使用PDO

    和当前使用mysql非常像

    要想使用mysql需要开启mysql扩展,

    需想使用PDO,需要开启PDO扩展

    获得PDO对象,调用方法

    (1)要开启pdo驱动

    Extension = php_pdo.dll

    Extension = php_pdo_sqlite.dll

    Extension = php_pdo_mysql.dll

    开启这个扩展(驱动),就可以使用这个扩展给我们提供类了

    2)使用这个类,实例化这个类,调用属性和方法

        <?php

       //使用PDO操作数据库

       //第一个参数:连接数据库的类型:主机名;数据库名

       $dsc = 'mysql:host=localhost;dbname=mysql_text';

       $user = 'root';

       $pass = '123';

       $pdo = new PDO($dsc,$user,$pass);//实例化一个类的时候,会自动的先调用__construct()构造函数

       //var_dump($pdo);

      

       //执行sql语句获得

       $sql = 'select*fromgoods';

       $result = $pdo->query($sql);//query方法返回的是PDOStatement对象

       //如果想获得具体的数据,需要调用对象的方法:fetchAll();参数是类常量,表示返回什么样的数据

       $rows = $result->fetchAll(PDO::FETCH_BOTH);

       //var_dump($rows);

      

       //更新数据库的操作

       $sql = 'update goods set goods_name="lalala" wheregoods_id=3';

       //执行增删改的语句,exec()方法,执行查询的语句 query()

       //exec()返回受影响的函数      query()返回PDOStatement对象

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

       var_dump($nums);

      

       ?>

    二、     PDO预编译机制

    先将sql语句的数据部分和费数据部分分离开————》将不带数据的部分预编译一下prepare()————》在编译结果上绑定数据bandparam()————》执行编译结果execute()

    预编译的好处:1、减少了编译的字符数,编译的速度提高

                  2、如果再次执行同样的sql语句,直接绑定数据,减少编译sql语句时间

    写代码实现PDO的预编译(与处理机制)

    <?php

        //预编译:PDO::prepare($sql);   返回PDOStatement对象

        //绑定数据PDOStamentt->bindParam();  给预编译的结果绑定数据

        //执行编译结果 PDOStament->execute();

       

        //使用PDO操作数据库

        //第一个参数:连接数据库的类型:主机名;数据库名

        $dsn  = 'mysql:host=localhost;dbname=mysql_text';

        $user = 'root';

        $pass = '123';

        $pdo = new PDO($dsn,$user,$pass);

       //var_dump($pdo);

      

       

        //预编译prepare();参数是不带数据的sql语句

        //先将sql语句中的数据部分用占位符代替 :占位符名称

        $sql = 'insert intogoods values(null,:name,:price,:number)';

        $smt = $pdo->prepare($sql);  //返回一个PDOStament 对象

        //绑定数据 PDOStament对象的bindParam()来绑定参数:占位符,实际数据

        $goods_name= 'surface';

        $goods_price= '3500';

        $goods_num= '41';

        $smt->bindParam(':name',$goods_name);

        $smt->bindParam(':price',$goods_price);

        $smt->bindParam(':number',$goods_num);

        $smt->execute()

    ?>

    三、     PDO的错误处理机制:

    1)静默模式

      默认情况下与mysql处理方式一致,不现实错误信息(静默模式)但是我们可以通过固定的方法获得错误信息

    2)警告模式

        //更改属性设置错误处理模式

        $pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);

    3)异常模式,当发生错误时,抛出一个异常

       $pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

       $sql = 'select*fromgood';

       try {

       //尝试可能会处错误的代码

       $pdo ->query($sql);

       }catch (PDOException $e){

       //现在捕获异常后,自己看着办,是让他显示出来呢,还是输出到日志文件里呢?

        //通常是将错误信息输出到日志文件里

       var_dump($e->getMessage());

       file_put_contents('D://mysql.log',$e->getMessage());

    }

  • 相关阅读:
    C++11之function模板和bind函数适配器
    C++11之右值引用(三):使用C++11编写string类以及“异常安全”的=运算符
    C++11之右值引用(二):右值引用与移动语义
    C++11之右值引用(一):从左值右值到右值引用
    C++Singleton的DCLP(双重锁)实现以及性能测评
    信息熵
    ip访问网站和localhost访问网站中top使用
    方差与协方差
    js获取file控件的完整路径(上传图片预览)
    对线性回归,logistic回归和一般回归
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3063410.html
Copyright © 2011-2022 走看看