PDO 一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。那么pdo具体支持哪些数据库操作呢?
PDO支持的数据库
| 驱动名称 | 支持的数据库 |
| PDO CUBRID | Cubrid |
| PDO DBLIB | FreeTDS/Microsoft SQL Server/ Sybase |
| PDO FIREBIR | Firebird/Interbase 6 |
| PDO IBM | IBM DB2 |
| PDO INFORMIX | IBM Informix Dynamic Server |
| PDO MYSQL | MySQL 3.x/4.x/5.x |
| PDO CI | Oracle Call Interface |
| PDO ODBC | ODBC V3(IBM DB2, uniXODBC and win32 ODBC) |
| PDO PGSQL | PostgreSQL |
| PDO SQLITE | SQLite及 SQLite2 |
| PDO SOLSRV | Microsoft SQL Server /SQL Azure |
| PDO 4D | 4D |
我们在做php项目的时候都知道,要操作数据库必先连接数据库,那么PDO是如何连接数据库的呢?这里我们以——mysql 为例。
在使用pdo之前我们要先配置,将pdo扩展引入,否则无法使用。
//(在php.ini文件中开启此扩展,#这一步在 PHP 5.3及更高版本中不是必须的,对于 PDO 不再需要做为一个 DLL 文件。) extension=php_pdo.dll
然后在php.ini文件中找到具体数据库的扩展,将其注释去掉,比如这里我们要用pdo操作mysql数据库,因此我们要在php.ini文件中找到mysql的pdo扩展,并将其注释去掉:

然后重启Apache,接下来就可以用pdo mysql扩展操作mysql数据库了。
PDO连接mysql的3种方式:
1、通过参数形式连接数据库
<?php
//通过参数形式连接数据库
try{
//数据源,要连接什么数据库,数据库地址,数据库名
$dsn='mysql:host=localhost;dbname=test';
//数据库账号
$username='root';
//数据库密码
$passwd='root';
$pdo=new PDO($dsn, $username, $passwd);
var_dump($pdo);
}catch(PDOException $e){
echo $e->getMessage();
}
数据库连接成功,var_dump会打印出一个PDO对象,如果连接失败catch会捕获到错误信息并输出:

在后面的方法中就不在展示连接错误示例了。
2、通过URI形式连接数据库
把dsn数据源信息写入文件中,然后通过引入这个文件连接数据库
<?php
//通过uri的形式连接数据库
try{
$dsn='uri:file://D:\phpstudy\WWW\test\pdo\dsn.txt';
$username='root';
$passwd='root';
$pdo=new PDO($dsn,$username,$passwd);
var_dump($pdo);
}catch(PDOException $e){
echo $e->getMessage();
}#dsn.txt 文件配置信息 mysql:dbname=test;host=localhost

3、通过配置文件形式连接数据库
<?php
try{
$dsn='test';
$username='root';
$passwd='root';
$pdo=new PDO($dsn,$username,$passwd);
var_dump($pdo);
}catch(PDOException $e){
echo $e->getMessage();
}pdo.dsn.test="mysql:host=localhost;dbname=test"
通过配置文件连接数据库的时候,如果用调试工具调试可能会报invalid data source name,但在浏览器中执行是没有问题的,这个不是pdo的问题,应该是调试工具的问题。

pdo与mysql(php5.2版本),pdo与mysqli(php5.5版本)效率对比
<?php
header('content-type:text/html;charset=utf-8');
//1.通过PDO连接数据库
$pStartTime=microtime(true);
for($i=1;$i<=100;$i++){
$pdo=new PDO('mysql:host=localhost;dbname=test','root','root');
}
$pEndTime=microtime(true);
$res1=$pEndTime-$pStartTime;
//2.通过MySQL连接数据库
$mStartTime=microtime(true);
for($i=1;$i<=100;$i++){
// mysqli
// mysqli_connect('localhost','root','root','test');
//mysql
mysql_connect('localhost','root','root');
mysql_select_db('test');
}
$mEndTime=microtime(true);
$res2=$mEndTime-$mStartTime;
// echo 'pdo耗时'.$res1,'<br/>mysqli耗时',$res2;
echo 'pdo耗时'.$res1,'<br/>mysql耗时',$res2;
echo '<hr/>';
// echo 'PDO连接数据库MySQLi的'.round($res1/$res2).'倍';
echo 'PDO连接数据库MySQL的'.round($res1/$res2).'倍';
虽然在同等条件下连接数据库pdo的耗时远大于mysql的耗时,但自php5.5以后已不在用mysql,而改为mysqli,而在同等条件下连接数据库pdo的耗时跟mysqli的耗时差不多。
