php -- PDO属性设置
设置PDO在处理数据的过程中采用什么方式去处理
PDO::setAttribute:设置属性
PDO::getAttribute:获取属性
也可以在
直接PDO初始化时传递参数
1
2
3
|
$db
=
new
PDO(
$dsn
,
$username
,
$password
,
array
(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
|
语法:
bool
PDO::setAttribute
( int
$attribute
,
mixed
$value
)
设置数据库句柄属性。下面列出了一些可用的通用属性;有些驱动可能使用另外的特定属性。
参数
$attribute
PDO::ATTR_CASE
:强制列名为指定的大小写。他的$value可为:
PDO::CASE_LOWER
:强制列名小写。
PDO::CASE_NATURAL
:保留数据库驱动返回的列名。
PDO::CASE_UPPER
:强制列名大写。
PDO::ATTR_ERRMODE
:错误报告。他的$value可为:
PDO::ERRMODE_SILENT
: 仅设置错误代码。
PDO::ERRMODE_WARNING
: 引发
E_WARNING
错误
PDO::ERRMODE_EXCEPTION
: 抛出
exceptions
异常。
PDO::ATTR_ORACLE_NULLS
(在所有驱动中都可用,不仅限于Oracle): 转换 NULL 和空字符串。他的$value可为:
PDO::NULL_NATURAL
: 不转换。
PDO::NULL_EMPTY_STRING
: 将空字符串转换成
NULL
。
PDO::NULL_TO_STRING
: 将 NULL 转换成空字符串。
PDO::ATTR_STRINGIFY_FETCHES
: 提取的时候将数值转换为字符串。 Requires
bool
.
PDO::ATTR_STATEMENT_CLASS
: 设置从PDOStatement派生的用户提供的语句类。 不能用于持久的PDO实例。 需要
array(string 类名, array(mixed 构造函数的参数))
。
PDO::ATTR_TIMEOUT
: 指定超时的秒数。并非所有驱动都支持此选项,这意味着驱动和驱动之间可能会有差异。比如,SQLite等待的时间达到此值后就放弃获取可写锁,但其他驱动可能会将此值解释为一个连接或读取超时的间隔。 需要
int
类型。
PDO::ATTR_AUTOCOMMIT
(在OCI,Firebird 以及 MySQL中可用): 是否自动提交每个单独的语句。
PDO::ATTR_EMULATE_PREPARES
启用或禁用预处理语句的模拟。 有些驱动不支持或有限度地支持本地预处理。使用此设置强制PDO总是模拟预处理语句(如果为
TRUE
),或试着使用本地预处理语句(如果为
FALSE
)。如果驱动不能成功预处理当前查询,它将总是回到模拟预处理语句上。 需要
bool
类型。
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
(在MySQL中可用): 使用缓冲查询。
PDO::ATTR_DEFAULT_FETCH_MODE
: 设置默认的提取模式。关于模式的说明可以在
PDOStatement::fetch()
文档找到。
常用属性
PDO::ATTR_AUTOCOMMIT
:设置当前连接Mysql服务器的客户端的SQL语句是否自动执行,
默认是自动提交
//自动提交属性
var_dump
(
$pdo
->getAttribute(PDO::ATTR_AUTOCOMMIT));
//1
$pdo
->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
var_dump
(
$pdo
->getAttribute(PDO::ATTR_AUTOCOMMIT));
//0
PDO::ATTR_CASE
:当pdo从结果集中获取数据的时候,如何处理对应的字段的名字
PDO::CASE_LOWER:将所有字段都小写显示
PDO::CASE_UPPER:所有字段都大写显示
PDO::CASE_NATURAL:原本怎么样就怎么样
$pdo
->setAttribute(PDO::ATTR_CASE,PDO::CASE_NATURAL);
//或 $pdo->setAttribute(PDO::ATTR_CASE,1);
var_dump
(PDO::CASE_UPPER);
//1 转换为大写
var_dump
(PDO::CASE_LOWER);
//2 转换为小写
var_dump
(PDO::CASE_NATURAL);
//0 是怎样就是怎样
$sql
= "select * from user ";
$stmt
=
$pdo
->query(
$sql
);
var_dump
(
$stmt
->fetch(PDO::FETCH_ASSOC));
PDO::ATTR_ERRMODE
:错误模式,当pdo出现错误的时候到底使用哪种模式进行处理
PDO::ERRMODE_SILENT:静默模式,默认的出错了不管
PDO::ERRMODE_WARNING:警告模式,如果出错了就会报出警告
PDO::ERRMODE_EXCEPTION:异常模式,如果出错会采用异常来处理(PDOException)
var_dump
(
$pdo
->getAttribute(PDO::ATTR_ERRMODE));
var_dump
(PDO::ERRMODE_SILENT);
//0 静默模式,默认的出错了不管
var_dump
(PDO::ERRMODE_WARNING);
//1 警告模式,如果出错了就会报出警告
var_dump
(PDO::ERRMODE_EXCEPTION);
//2 异常模式,如果出错会采用异常来处理(PDOException)
PDO::ATTR_PERSISTENT
:当前对Mysql服务器的连接是否是长连接
TRUE:是长连接(长连接的使用必须要配合:Apache(connection:keepAlive),Mysqld)
FALSE:默认的,非长连接
什么情况下使用长连接?
- 不同的脚本的执行间距非常短,同时每个脚本都要操作数据库(Mysql:mysql_pconnect())