ZetCode

PHP PDO::getAttribute 方法

最后修改于 2025 年 4 月 19 日

PDO::getAttribute 方法用于检索 PHP 中的数据库连接属性。它提供了对各种 PDO 和特定于驱动程序的连接设置的访问。

基本定义

PDO::getAttribute 获取数据库连接属性的值。这些属性可以是 PDO 常量或特定于驱动程序的设置。

语法:public PDO::getAttribute(int $attribute): mixed。该方法接受一个属性常量并返回其当前值。

常用属性包括 PDO::ATTR_SERVER_INFO、PDO::ATTR_SERVER_VERSION 和 PDO::ATTR_DRIVER_NAME。某些属性是数据库驱动程序特定的。

获取数据库服务器版本

本示例演示如何检索数据库服务器版本。

get_server_version.php
<?php

declare(strict_types=1);

try {
    $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
    $version = $pdo->getAttribute(PDO::ATTR_SERVER_VERSION);
    
    echo "Database server version: $version";
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

这使用 PDO::ATTR_SERVER_VERSION 检索服务器版本。返回值取决于所使用的数据库系统。对于 MySQL,它返回 MySQL 服务器版本字符串。

检查连接状态

本示例演示如何检查连接是否为持久连接。

check_persistent.php
<?php

declare(strict_types=1);

try {
    $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password', [
        PDO::ATTR_PERSISTENT => true
    ]);
    
    $isPersistent = $pdo->getAttribute(PDO::ATTR_PERSISTENT);
    
    echo "Connection is " . ($isPersistent ? 'persistent' : 'not persistent');
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

这使用 PDO::ATTR_PERSISTENT 检查连接是否为持久连接。该方法对于持久连接返回 true,否则返回 false。持久连接在脚本执行结束时保持打开状态。

获取驱动程序名称

本示例演示如何获取数据库驱动程序的名称。

get_driver_name.php
<?php

declare(strict_types=1);

try {
    $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
    $driver = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
    
    echo "Database driver: $driver";
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

这使用 PDO::ATTR_DRIVER_NAME 检索驱动程序名称。对于 MySQL 连接,它返回“mysql”。对于 SQLite,它返回“sqlite”。此值有助于识别正在使用的数据库系统。

检查错误模式

本示例演示如何检查当前的错误处理模式。

check_error_mode.php
<?php

declare(strict_types=1);

try {
    $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $errorMode = $pdo->getAttribute(PDO::ATTR_ERRMODE);
    
    echo "Error mode: ";
    switch ($errorMode) {
        case PDO::ERRMODE_SILENT: echo "SILENT"; break;
        case PDO::ERRMODE_WARNING: echo "WARNING"; break;
        case PDO::ERRMODE_EXCEPTION: echo "EXCEPTION"; break;
    }
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

这使用 PDO::ATTR_ERRMODE 检查当前的错误模式。该方法返回 PDO::ERRMODE_* 常量之一。该示例显示了如何解释返回值。

获取客户端版本

本示例检索客户端库版本信息。

get_client_version.php
<?php

declare(strict_types=1);

try {
    $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
    $clientVersion = $pdo->getAttribute(PDO::ATTR_CLIENT_VERSION);
    
    echo "Client version: ";
    print_r($clientVersion);
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

这使用 PDO::ATTR_CLIENT_VERSION 检索客户端版本信息。对于 MySQL,它返回一个包含客户端库版本详细信息的数组。确切的格式取决于所使用的数据库驱动程序。

检查大小写转换

本示例检查列名是否转换为大写或小写。

check_case_conversion.php
<?php

declare(strict_types=1);

try {
    $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
    $caseConversion = $pdo->getAttribute(PDO::ATTR_CASE);
    
    echo "Case conversion: ";
    switch ($caseConversion) {
        case PDO::CASE_NATURAL: echo "NATURAL"; break;
        case PDO::CASE_UPPER: echo "UPPER"; break;
        case PDO::CASE_LOWER: echo "LOWER"; break;
    }
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

这使用 PDO::ATTR_CASE 检查当前的大小写转换设置。该方法返回 PDO::CASE_* 常量之一。这会影响结果集中返回的列名。

获取连接状态

本示例检索服务器状态信息。

get_server_info.php
<?php

declare(strict_types=1);

try {
    $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
    $serverInfo = $pdo->getAttribute(PDO::ATTR_SERVER_INFO);
    
    echo "Server info: $serverInfo";
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

这使用 PDO::ATTR_SERVER_INFO 检索服务器状态信息。对于 MySQL,它返回一个包含连接和服务器状态的字符串。确切的内容取决于所使用的数据库驱动程序。

最佳实践

来源

PHP PDO::getAttribute 文档

本教程通过实际示例介绍了 PDO::getAttribute 方法。它展示了如何检索各种数据库连接属性。

作者

我叫 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PHP PDO 函数