zoukankan      html  css  js  c++  java
  • PHP-------PDO:数据访问抽象层

                                     PDO:数据访问抽象层

    它是用来做数据访问的,和数据库之间连接,执行一些SQL语句

    这种方式比之前的,Mysqli的方式功能更大一些

    用一张图来说明:

    人为写了一条SQL语句,是通过Mysqli的对象(封装好的类),通过Mysql驱动,然后在操作Mysql数据库。这是以前的方式。

    如果这条SQL语句,想访问另外一个数据库,不是Mysql了,想用一下Oracle Call数据库或者SQL Server数据库,根据逻辑,应该还要有一个类是专门操作Oracle Call 数据库的类

    同一张图来表示:

    这条SQL语句在通过  类,找到Oracle Call数据库的驱动,在通过驱动,来访问Oracle Call数据库

    还想访问另外一个数据库,想用一下SQL Server数据库,根据逻辑,应该还要有一个类是专门操作SQL Server 数据库的,

    同一张图来表示:

    还想访问其他数据库,再来一遍

    由上可见,中间的每一个类,它所拥有的功能,都是不一样的,Mysqli 的功能就是连接Mysql数据库的,其他的类,这个类就是连接Oracle Call的数据库,再有一个类,这个类是来操作SQL Server数据库的。如果要换一个数据库的话,因为全都用的Mysqli做的,要修改代码。这样的话,就想能不能有一个东西,可以使用一条SQL语句,能够操作,所有的数据库。也就是说,换了数据库没有关系,这个程序照样可以使用,只不过换一个关键字就可以了。

    用一个访问数据库的语句,就可改变来访问多个数据库,使用同一个访问语句,只需要改数据库的名称,就可访问多个数据库了,其他的都不需要动,只改数据库的名称就可以,这样做是为了让程序,到后期,如果想更改数据库,或者在做程序的时候,需要用到两个数据库的内容,这样做的话非常的方便。

    所以就出来了,PDO,

    PDO叫做数据访问抽象层

    他实际上,就把中间的这一块,合并成同一个,它使用一个类,这个类里面,封装的很多的方法,使用这一个类,就去操作下面所有的数据库,这只要PHP装了这个数据库的驱动,就可以了,要是没装这个数据库的驱动,那是不能操作的,只要装了这个驱动,PDO就可以使用通一条语句,来操作所有的数据库,想换哪一个,就换一下名字就可以了。

    PDO:数据访问抽象层

    它实际上,就是把中间这一块合并成同一个,它使用一个类,类里封装了很多的方法,使用这一个类,类里面封装的很多的方法,使用类就来操作下面所有的数据库,只要PHP装了数据库的驱动,就可以了,要是没装数据库驱动是不可以的操作的,只要装了驱动 ,PDO就可以使用同一条语句,来操作所有的数据库,想换哪个,就换一下名字,就可以了。

    数据访问抽象层,相当于一个抽象类,让用户看到的这一部分,实际上是一个抽象的,不涉及到一个具体的,这个数据库怎样连接,另外一个数据库怎样连接,不涉及一个具体的内容,就是一个抽象的,造一个连接,不要管连象什么地方怎么连的,就造一个连接,就好了,写SQL语句,执行SQL语句就完了,完全不用管,下面是什么数据库。比如,使用Mysqli,要连接Mysqli可能使用的方法是Mysqli里面的,如果要连接别的数据库有可能有另外一个类,另外一个类的方法,也不一样,这样一套程序是不能访问两个数据库的,如果要访问就需要修改代码风格。

    但是使用PDO的话,就使代码风格不变,只改其中的关键字,就可以了,代码该怎样还是怎样的,查询是使用这个方法来执行的,所有的数据库查询都是使用这个方法来执行的,所以,数据访问抽象层,就让我们的程序的扩展性更加的好。

    数据访问抽象层怎样使用呢???

    它也是一个类,这个类叫PDO,所以我们再用它之前,需要造一个对象,也是关于PDO的对象,

    $pdo=new PDO();   //()括号里需要参数

    //$dsn 数据源,   $usernane 数据库的用户名,   $passwd 数据库的密码 , 

    array $options参数需要一个数组  

       dsn 数据源  怎么写呢??

     

     

     

    如果连接的是MySQL数据库,驱动的名称就叫做MYSQL;如果连接的是Oracle Call Interface数据库,驱动的名称就叫做 OCI ;如果连接的是Microsoft SQL Server / SQL Azure数据库,驱动的名称就叫做SQLSRV;  连的哪个数据库,就选择哪个驱动名就可以了

    例子:

    (驱动名)mysql(数据库名称)dbname (服务器地址)host

       

    数据源是字符串

     

    把数据源添加到它的第一个参数里

    造了一个PDO的对象:$pdo = new PDO($dsn,"root","");

    然后写SQL语句,再去执行SQL语句

     

    query方法是来执行一条SQL语句的

     

    exec方法,如果是增删改可以使用,这个方法

    如果是一个额查询,可以使用query方法

     1 <?php
     2 
     3 //pdo:数据访问抽象层
     4 //dsn:数据源;
     5 $dsn = "mysql:host=localhost;dbname=lianxi";//是个字符串
     6 //造了一个PDO的对象
     7 $pdo = new PDO($dsn,"root","");  //"root"用户名    ""密码
     8 
     9 //写SQL语句
    10 $sql = "select * from kemu";     //查询语句
    11 //执行SQL语句
    12 //PDO提供了一个方法可以来执行
    13 
    14 $a = $pdo->query($sql);  //执行之后,有返回值,是$a
    15 //$a是个什么东西,是不是一个数组,能不能去循环它
    16 
    17 foreach($a as $v)      //就感觉它是一个二维数组
    18 {
    19   var_dump($v);    
    20     
    21 }
    22 
    23 ?>

    显示的结果:

     1 <?php
     2 
     3 //pdo:数据访问抽象层
     4 //dsn:数据源;
     5 $dsn = "mysql:host=localhost;dbname=lianxi";//是个字符串
     6 //造了一个PDO的对象
     7 $pdo = new PDO($dsn,"root","");
     8 
     9 //写SQL语句
    10 $sql = "insert into kemu values('6','地理')";//添加数据
    11 //执行SQL语句
    12 //PDO提供了一个方法可以来执行
    13 
    14 $a = $pdo->exec($sql);  //执行之后,有返回值,是$a
    15 //$a是个什么东西,是不是一个数组,能不能去循环它
    16 
    17 var_dump($a);
    18 
    19 ?>

    显示的结果:

    上面的query方法和exec方法,不建议使用,但是要会。

  • 相关阅读:
    Vue常用语法
    Vue--过滤器、指令、插件
    使用vue-cli创建项目
    electron Ctrl+滚轮事件 放大缩小
    axios 处理超时问题 记录
    electron 清除所有cookie记录
    electron用默认浏览器打开链接的3种实现方式
    electron 不支持Ctrl+滚动条放大缩小,自己动手做了一个react组件
    排序算法记录
    umi react 集成 spreadjs
  • 原文地址:https://www.cnblogs.com/yuyu1993/p/5602186.html
Copyright © 2011-2022 走看看