PHP-------PDO:数据访问抽象层

Posted 玉育

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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方法,不建议使用,但是要会。

 

以上是关于PHP-------PDO:数据访问抽象层的主要内容,如果未能解决你的问题,请参考以下文章

PDO:数据访问抽象层

PHP – PDO函数简介

PHP PDO函数库详解

PDO应用

PDO方法,SQL注入攻击

PHP – PDO简单概述