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