$dbh = new PDO('OCI:', 'scott', 'tiger');
$dbh->setAttribute(PDO_ATTR_CASE, PDO_CASE_UPPER);
stmt = $dbh->prepare("SELECT extension, name from CREDITS");
if ($stmt->execute()) {
$stmt->bindColumn('EXTENSION', $extension);
$stmt->bindColumn('NAME', $name);
while ($stmt->fetch(PDO_FETCH_BOUND)) {
echo "Extension:$extension, Author:$namen";
}
}
除了 PDO_CASE_UPPER 之外,还有 PDO_CASE_LOWER(它会将列名转换为小写)和 PDO_CASE_NATURAL(它是默认选项:使列保持数据库驱动程序返回的形式)。
错误和错误处理
可移植脚本的另一个难题是处理从各种数据库处理程序返回的各种不同的错误消息;某些数据库对于程序化处理错误的支持能力很差,而其他一些数据库则具有非常丰富的错误代码。只要可行,PDO 将为您的脚本提供一个统一的错误代码,从而使您不必为应对可移植性的这个方面所累。当然,PDO 还会为驱动程序提供原生错误代码和错误消息,以防您需要用它来进行诊断,或者错误代码映射不完整。
另一个困扰 PHP 数据库扩展的一致性问题是错误处理策略的一致性:某些扩展会返回的错误代码需要您手动抓取错误字符串,而其他一些扩展则只是发出 PHP 警告。PDO 允许您从下列三种不同的错误处理策略中选择一种:
·PDO_ERRMODE_SILENT
这是默认模式;它只是使用语句和数据库句柄对象的 errorCode() 和 errorInfo() 方法为您设置要检查的错误代码。
if (!$dbh->exec($sql)) {
echo $dbh->errorCode() ."<BR>";
$info = $dbh->errorInfo();
// $info[0] == $dbh->errorCode() 统一的错误代码
// $info[1] 是驱动程序特定的错误代码
// $info[2] 是驱动程序特定的错误字符串
}
·
PDO_ERRMODE_WARNING
除了设置错误代码之外,PDO 还会发出 PHP 警告,您可以使用常规的 PHP 错误处理程序捕获该警告,并集中应用您准备好用于应用程序的任何错误处理/记录策略,或者只是使该错误显示在浏览器中(在内部测试过程中非常有用)。
·
PDO_ERRMODE_EXCEPTION
除了设置错误代码之外,PDO 还会抛出一个 PDOException,并将其属性设置为包含该错误代码和信息。然后,您可以在代码的较高级别捕获该异常,使用全局异常处理程序捕获该异常,或者不对其进行处理而终止脚本(此时将回滚任何未决的事务)。
try {
$dbh->exec($sql);
} catch (PDOException $e) {
// 显示警告消息
print $e->getMessage();
$info = $e->errorInfo;
// $info[0] == $e->code; unified error code
// $info[1] 是驱动程序特定的错误代码
// $info[2] 是驱动程序特定的错误字符串
}
请注意,与警告或异常相比,静默模式针对运行时错误使用的资源最少,但是为了获得该速度,您牺牲了一些简单性,而变得有一点复杂。







