setAttribute()

1. 定义

该方法为数据库连接句柄设置通用属性。 成功时返回true,失败则返回false

2. 语法

PDO::setAttribute ( int $attribute , mixed $value ) : bool

3. 参数说明

参数 可选性 数据类型 描述
$attribute 必需 常量或整型 属性类型
$value 必需 mixed 属性值

其中,$attribute有以下可选值:

  • PDO::ATTR_CASE:强制列名为大写或小写
    • PDO::CASE_LOWER:强制小写
    • PDO::CASE_NATURAL:保留列名原本的值
    • PDO::CASE_UPPER:强制大写
  • PDO::ATTR_ERRMODE:错误报告收集的类别
    • PDO::ERRMODE_SILENT:只设置错误代码
    • PDO::ERRMODE_WARNING:提出一个警告(warning)
    • PDO::ERRMODE_EXCEPTION:抛出一个异常(Exception)
  • PDO::ATTR_ORACLE_NULLS:对 Oracle 数据库无效。NULL与空字符串之间的转换
    • PDO::NULL_NATURAL:保留NULL
    • PDO::NULL_EMPTY_STRING:空字符串转换为NULL
    • PDO::NULL_TO_STRINGNULL值转换为空字符串
  • PDO::ATTR_STRINGIFY_FETCHES:布尔值,提取结果时是否将数值转换为字符串
  • PDO::ATTR_STATEMENT_CLASS:设置使用用户自定义的继承自PDOStatement的语句类。无法与进行持久性连接的 PDO 实例配合使用,值为一个包含字符串类名和构造函数参数数组的数组
  • PDO::ATTR_TIMEOUT:指定数据库连接的最大超时时间。各驱动对此支持度不一,意义也不一定相同,值为一个整型数值
  • PDO::ATTR_AUTOCOMMIT:对 OCI,Firebird 和 MySQL 有效。设置是否自动提交每个 SQL 语句
  • PDO::ATTR_EMULATE_PREPARES:启用或禁用PDO预处理语句(某些数据库驱动支持度有限)
  • PDO::MYSQL_ATTR_USE_BUFFERED_QUERY:仅对 MySQL 有效。使用查询缓冲
  • PDO::ATTR_DEFAULT_FETCH_MODE:设置默认提取结果模式
    • PDO::PDO::FETCH_ASSOC:结果集返回一个索引为列名的关联数组
    • PDO::FETCH_BOTH:默认值。结果集分别返回以索引为列名和从零开始的数字的关联数组
    • PDO::FETCH_BOUND:返回TRUE,并将结果集中的列值分配给使用PDOStatement::bindColumn()方法绑定到的 PHP 变量
    • PDO::FETCH_CLASS:返回所请求类的新实例,并将结果集的列值映射到该类中的命名属性,当与PDO::FETCH_PROPS_LATE同时使用时,将调用该类的构造函数
    • PDO::FETCH_INTO:更新请求的类中已存在的实例,并将结果集的列值映射到该类中的命名属性
    • PDO::FETCH_LAZY:相当于PDO::FETCH_BOTH | PDO::FETCH_OBJ,在访问对象的变量时创建该变量
    • PDO::FETCH_NUM:结果集返回一个数字索引的数组
    • PDO::FETCH_OBJ:结果集返回一个以列名为属性名的匿名对象
    • PDO::FETCH_PROPS_LATE:当与PDO::FETCH_CLASS同时使用时,将在从各个列值分配属性之前调用该类的构造函数

同时,该方法等同于将以上选项通过以键值对数组的形式传入PDO::__construct()方法。

4. 示例

下列代码等同于PDO::__construct()中的 PHP 示例代码。

假定您安装了 MySQL,并配置了用户root,密码为mysql,并存在一个名为test的数据库:

<?php

// PDO::setAttribute()
// 为数据库连接句柄设置通用属性

try {
    $config = ['driver' => 'mysql', 'host' => 'localhost', 'dbname' => 'test', 'charset'=>'utf8', 'user' => 'root', 'pwd' => 'mysql'];
    $dsn = sprintf('%s:host=%s;dbname=%s;charset=%s', $config['driver'], $config['host'], $config['dbname'], $config['charset']);
    $conn = new PDO($dsn, $config['user'], $config['pwd']);
    $conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);// 设置属性
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// 设置属性
    if($conn) echo '数据库连接成功!';
} catch (PDOException $e) {
    error_log($e->getMessage());// 将错误信息记录至日志
    echo $e->getMessage();
}