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方法,不建议使用,但是要会。

  • 相关阅读:
    【HDOJ】2267 How Many People Can Survive
    【HDOJ】2268 How To Use The Car
    【HDOJ】2266 How Many Equations Can You Find
    【POJ】2278 DNA Sequence
    【ZOJ】3430 Detect the Virus
    【HDOJ】2896 病毒侵袭
    求奇数的乘积
    平方和与立方和
    求数列的和
    水仙花数
  • 原文地址:https://www.cnblogs.com/yuyu1993/p/5602186.html
Copyright © 2011-2022 走看看