phppdo数据库 php 数据库( 三 )


数据库支持
此扩展可以使用 PDO 驱动编写过的所有数据库 。在本文书写时,下面的数据库支持已经实现:
PDO_DBLIB ( FreeTDS / Microsoft SQL Server / Sybase )
PDO_FIREBIRD ( Firebird/Interbase 6 )
PDO_IBM ( IBM DB2 )
PDO_INFORMIX ( IBM Informix Dynamic Server )
PDO_MYSQL ( MySQL 3.x/4.x/5.x )
PDO_OCI ( Oracle Call Interface )
PDO_ODBC ( ODBC v3 (IBM DB2, unixODBC and win32 ODBC) )
PDO_PGSQL ( PostgreSQL )
PDO_SQLITE ( SQLite 3 and SQLite 2 )
PDO_4D ( 4D )
你的系统不会也不必支持所有上面的驱动phppdo数据库;下面是一个快速检查所支持数据库的方法:
1 print_r(PDO::getAvailableDrivers());
连接
不同数据库的连接方法可能稍有不同,下面是一些较为流行的数据库连接方法 。你将注意到,虽然数据库类型不同 , 前三种数据库的连接方式是相同的——而 SQLite 使用自己的语法 。
Connection String
01 try {
02# MS SQL Server andSybase with PDO_DBLIB
03$DBH = newPDO("mssql:host=$host;dbname=$dbname, $user, $pass");
04$DBH = newPDO("sybase:host=$host;dbname=$dbname, $user, $pass");
05
06# MySQL with PDO_MYSQL
07$DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);
08
09# SQLite Database
10$DBH = newPDO("sqlite:my/database/path/database.db");
11 }
12 catch(PDOException $e) {
13echo$e-getMessage();
14 }
注意 try/catch 块——你应该总是使用 try/catch 包装你的 PDO 操作 , 并使用异常机制——这里只是简单的示例 。通常,你只需要一个连接——有很多可以教你语法的列表 。$DBH 代表“数据库句柄”,这将贯穿全文 。
通过将句柄设置为 NULL , 你可以关闭任一连接 。
1 # close the connection
2 $DBH = null;
你可以在PHP.net找到更多数据库特定选项和/或其它数据库连接字符串的信息 。
异常与 PDO
PDO 可以使用异常处理错误,这意味着你的所有 PDO 操作都应当包装在一个 try/catch 块中 。你可以通过设定错误模式属性强制 PDO 在新建的句柄中使用三种错误模式中的某一个 。下面是语法:
1 $DBH-setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
2 $DBH-setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
3 $DBH-setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
无论你设定哪个错误模式 , 一个错误的连接总会产生一个异常,因此创建连接应该总是包装在 try/catch 块中 。
PDO::ERRMODE_SILENT
这是默认的错误模式 。如果你使用这个模式,你将得使用同 mysql 或 mysqli 扩展一样的方法差错 。其它两种模式更适合 DRY 编程 。
PDO::ERRMODE_WARNING
此方法将会发出一个标准PHP警告 , 并允许程序继续运行 。这对调试很有帮助 。
PDO::ERRMODE_EXCEPTION
这是多数情况下你所希望的方式 。它生成异常,允许你更容易的处理错误,隐藏可能导致它人了解你系统的信息 。下面是一个充分利用异常的示例:
01 # connect to the database
02 try {
03$DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);
04$DBH-setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
05
06# UH-OH! Typed DELECT instead of SELECT!
07$DBH-prepare('DELECT name FROM people');
08 }
09 catch(PDOException $e) {
10echo"I'm sorry, Dave. I'm afraid I can't do that.";
11file_put_contents('PDOErrors.txt', $e-getMessage(), FILE_APPEND);
12 }
在 select 语句中有一个故意留下的错误;这将导致一个异常 。异常错误细节保存至一个 log 文件 , 并生成一段友好的(或不怎么友好的)信息於用户 。
插入和更新

推荐阅读