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的耗时差不多。