预定义常量

以下常量由此扩展定义,并且只有在将扩展编译到 PHP 或在运行时动态加载时才可用。

PDO::PARAM_BOOL (int)
表示布尔数据类型。
PDO::PARAM_NULL (int)
表示 SQL NULL 数据类型。
PDO::PARAM_INT (int)
表示 SQL INTEGER 数据类型。
PDO::PARAM_STR (int)
表示 SQL CHAR、VARCHAR 或其他字符串数据类型。
PDO::PARAM_STR_NATL (int)
表示字符串使用国家字符集。 自 PHP 7.2.0 起可用。
PDO::PARAM_STR_CHAR (int)
表示字符串使用常规字符集。 自 PHP 7.2.0 起可用。
PDO::PARAM_LOB (int)
表示 SQL 大对象数据类型。
PDO::PARAM_STMT (int)
表示记录集类型。目前不受任何驱动程序支持。
PDO::PARAM_INPUT_OUTPUT (int)
指定参数是存储过程的 INOUT 参数。必须将此值与显式 PDO::PARAM_* 数据类型进行按位或运算。
PDO::FETCH_DEFAULT (int)
指定应使用默认获取模式。自 PHP 8.0.7 起可用。
PDO::FETCH_LAZY (int)
指定获取方法应将每一行作为具有与结果集中返回的列名相对应的属性名称的对象返回。PDO::FETCH_LAZY 返回一个 PDORow 对象,该对象在访问时创建对象属性名称。在 PDOStatement::fetchAll() 内部无效。
PDO::FETCH_ASSOC (int)
指定获取方法应将每一行作为由相应结果集中返回的列名索引的数组返回。如果结果集包含多个具有相同名称的列,PDO::FETCH_ASSOC 仅返回每个列名一个值。
PDO::FETCH_NAMED (int)
指定获取方法应将每一行作为由相应结果集中返回的列名索引的数组返回。如果结果集包含多个具有相同名称的列,PDO::FETCH_NAMED 返回每个列名的一个值数组。
PDO::FETCH_NUM (int)
指定获取方法应将每一行作为由相应结果集中返回的列号索引的数组返回,从列 0 开始。
PDO::FETCH_BOTH (int)
指定获取方法应将每一行作为由相应结果集中返回的列名和列号索引的数组返回,从列 0 开始。
PDO::FETCH_OBJ (int)
指定获取方法应将每一行作为具有与结果集中返回的列名相对应的属性名称的对象返回。
PDO::FETCH_BOUND (int)
指定获取方法应返回 TRUE 并将结果集中列的值分配给使用 PDOStatement::bindParam()PDOStatement::bindColumn() 方法绑定的 PHP 变量。
PDO::FETCH_COLUMN (int)
指定获取方法应仅返回结果集下一行中的单个请求列。
PDO::FETCH_CLASS (int)
指定获取方法应返回请求类的新的实例,将列映射到类中的命名属性。

注意: 如果属性在请求的类中不存在,则调用魔术 __set() 方法

PDO::FETCH_INTO (int)
指定获取方法应更新请求类的现有实例,将列映射到类中的命名属性。
PDO::FETCH_FUNC (int)
允许完全自定义数据在运行时的处理方式(仅在 PDOStatement::fetchAll() 内部有效)。
PDO::FETCH_GROUP (int)
按值分组返回。通常与 PDO::FETCH_COLUMNPDO::FETCH_KEY_PAIR 组合使用。
PDO::FETCH_UNIQUE (int)
仅获取唯一值。
PDO::FETCH_KEY_PAIR (int)
将两列结果获取到一个数组中,其中第一列是键,第二列是值。
PDO::FETCH_CLASSTYPE (int)
从第一列的值确定类名。
PDO::FETCH_SERIALIZE (int)
PDO::FETCH_INTO 相同,但对象作为序列化字符串提供。如果设置此标志,则永远不会调用类构造函数。自 PHP 8.1.0 起弃用。
PDO::FETCH_PROPS_LATE (int)
在设置属性之前调用构造函数。
PDO::ATTR_AUTOCOMMIT (int)
如果此值为 false,PDO 尝试禁用自动提交,以便连接开始一个事务。
PDO::ATTR_PREFETCH (int)
设置预取大小允许您为应用程序平衡速度和内存使用率。并非所有数据库/驱动程序组合都支持设置预取大小。更大的预取大小会导致性能提高,但会以更高的内存使用率为代价。
PDO::ATTR_TIMEOUT (int)
设置与数据库通信的超时值(以秒为单位)。
PDO::ATTR_ERRMODE (int)
有关此属性的更多信息,请参见 错误和错误处理 部分。
PDO::ATTR_SERVER_VERSION (int)
这是一个只读属性;它将返回有关 PDO 连接到的数据库服务器版本的信息。
PDO::ATTR_CLIENT_VERSION (int)
这是一个只读属性;它将返回有关 PDO 驱动程序正在使用的客户端库版本的信息。
PDO::ATTR_SERVER_INFO (int)
这是一个只读属性;它将返回有关 PDO 连接到的数据库服务器的一些元信息。
PDO::ATTR_CONNECTION_STATUS (int)
PDO::ATTR_CASE (int)
强制列名使用由 PDO::CASE_* 常量指定的特定大小写。
PDO::ATTR_CURSOR_NAME (int)
获取或设置要使用的游标名称。在使用可滚动游标和定位更新时最为有用。
PDO::ATTR_CURSOR (int)
选择游标类型。PDO 目前支持 **PDO::CURSOR_FWDONLY** 和 **PDO::CURSOR_SCROLL**。除非知道需要可滚动游标,否则请坚持使用 **PDO::CURSOR_FWDONLY**。
PDO::ATTR_DRIVER_NAME (int)
返回驱动程序的名称。

示例 #1 使用 PDO::ATTR_DRIVER_NAME

<?php
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
echo
"Running on mysql; doing something mysql specific here\n";
}
?>

PDO::ATTR_ORACLE_NULLS (int)
在数据获取时将空字符串转换为 SQL NULL 值。
PDO::ATTR_PERSISTENT (int)
请求持久连接,而不是创建新的连接。有关此属性的更多信息,请参阅 连接和连接管理
PDO::ATTR_STATEMENT_CLASS (int)
设置返回语句的类名。
PDO::ATTR_FETCH_CATALOG_NAMES (int)
将包含的目录名添加到结果集中返回的每个列名之前。目录名和列名之间用小数点 (.) 分隔。此属性的支持在驱动程序级别;您的驱动程序可能不支持它。
PDO::ATTR_FETCH_TABLE_NAMES (int)
将包含的表名添加到结果集中返回的每个列名之前。表名和列名之间用小数点 (.) 分隔。此属性的支持在驱动程序级别;您的驱动程序可能不支持它。
PDO::ATTR_STRINGIFY_FETCHES (int)
强制将所有获取的值视为字符串。
PDO::ATTR_MAX_COLUMN_LEN (int)
设置最大列名长度。
PDO::ATTR_DEFAULT_FETCH_MODE (int)
PDO::ATTR_EMULATE_PREPARES (int)
PDO::ATTR_DEFAULT_STR_PARAM (int)
设置默认字符串参数类型,可以是 **PDO::PARAM_STR_NATL** 和 **PDO::PARAM_STR_CHAR** 之一。 自 PHP 7.2.0 起可用。
PDO::ERRMODE_SILENT (int)
如果发生错误,则不引发错误或异常。开发人员应显式检查错误。这是默认模式。有关此属性的更多信息,请参阅 错误和错误处理
PDO::ERRMODE_WARNING (int)
如果发生错误,则发出 PHP **E_WARNING** 消息。有关此属性的更多信息,请参阅 错误和错误处理
PDO::ERRMODE_EXCEPTION (int)
如果发生错误,则抛出 PDOException。有关此属性的更多信息,请参阅 错误和错误处理
PDO::CASE_NATURAL (int)
保留数据库驱动程序返回的列名。
PDO::CASE_LOWER (int)
强制列名小写。
PDO::CASE_UPPER (int)
强制列名大写。
PDO::NULL_NATURAL (int)
PDO::NULL_EMPTY_STRING (int)
PDO::NULL_TO_STRING (int)
PDO::FETCH_ORI_NEXT (int)
获取结果集中的下一行。仅对可滚动游标有效。
PDO::FETCH_ORI_PRIOR (int)
获取结果集中的上一行。仅对可滚动游标有效。
PDO::FETCH_ORI_FIRST (int)
获取结果集中的第一行。仅对可滚动游标有效。
PDO::FETCH_ORI_LAST (int)
获取结果集中的最后一行。仅对可滚动游标有效。
PDO::FETCH_ORI_ABS (int)
从结果集中按行号获取请求的行。仅对可滚动游标有效。
PDO::FETCH_ORI_REL (int)
从结果集中游标当前位置的相对位置获取请求的行。仅对可滚动游标有效。
PDO::CURSOR_FWDONLY (int)
创建一个具有仅向前游标的 PDOStatement 对象。这是默认游标选择,因为它是 PHP 中最快、最常见的 数据访问模式。
PDO::CURSOR_SCROLL (int)
创建一个具有可滚动游标的 PDOStatement 对象。传递 PDO::FETCH_ORI_* 常量来控制从结果集中获取的行。
PDO::ERR_NONE (string)
对应于 SQLSTATE '00000',表示 SQL 语句已成功发出,没有错误或警告。此常量用于在检查 PDO::errorCode()PDOStatement::errorCode() 以确定是否发生错误时提供便利。您通常可以通过检查引发错误条件的方法的返回值来确定是否发生错误。
PDO::PARAM_EVT_ALLOC (int)
分配事件
PDO::PARAM_EVT_FREE (int)
释放事件
PDO::PARAM_EVT_EXEC_PRE (int)
在执行准备好的语句之前触发的事件。
PDO::PARAM_EVT_EXEC_POST (int)
在执行准备好的语句之后触发的事件。
PDO::PARAM_EVT_FETCH_PRE (int)
在从结果集中获取结果之前触发的事件。
PDO::PARAM_EVT_FETCH_POST (int)
在从结果集中获取结果之后触发的事件。
PDO::PARAM_EVT_NORMALIZE (int)
在绑定参数注册期间触发的事件,允许驱动程序规范化参数名称。
PDO::SQLITE_DETERMINISTIC (int)
指定使用 PDO::sqliteCreateFunction() 创建的函数是确定性的,即它在单个 SQL 语句中对相同的输入始终返回相同的结果。(自 PHP 7.1.4 起可用)。
添加注释

用户贡献的注释 8 个注释

20
sam at xnet dot tk
11 年前
需要注意的是,PDO::FETCH_CLASS 将在设置值(或调用 __set)*之后*调用构造函数。
5
kevin at kevinlocke dot name
4 年前
PDO::PARAM_STR_CHAR 和 PDO::PARAM_STR_NATL 必须与 PDO::PARAM_STR 结合使用按位或运算进行参数绑定。

这些标志控制值引用(例如 PDO::quote)以及在某些情况下(见下文)参数绑定(例如 PDO::bindParam、PDO::bindValue),以根据 SQL-92 的定义将字符串文字前缀为 N''。 从 PHP 7.3 开始,只有 dblib 和 mysql 支持这些标志。 对于 mysql 驱动程序,当 PDO::ATTR_EMULATE_PREPARES 为 true(默认值)时,这些标志只影响参数绑定。

MySQL 和 MariaDB 将以 N 为前缀的字符串文字解释为 utf8(而不是 utf8mb4),无论 `SET NAMES` 或字符集参数是什么。 如果数据库/表/列字符集不是 utf8,这会导致问题。 例如,在一个使用 utf8mb4 的数据库中,查询 "SELECT * FROM table WHERE col = :param" 和 bindValue(":param", "\u{1F600}", PDO::PARAM_STR | PDO::PARAM_STR_NATL) 将导致 "PDOException: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='". 使用 PDO::PARAM_STR 不使用 PDO::PARAM_STR_NATL 以及确保字符集 DSN 参数设置正确可以避免此问题。

参见
https://wiki.php.net/rfc/extended-string-types-for-pdo
https://mariadb.com/kb/en/library/string-literals/
https://dev.mysqlserver.cn/doc/refman/8.0/en/string-literals.html
4
todd at toddwiggins dot com dot au
4 年前
有关所有 PDO::MYSQL_* 常量的引用,请参见 MySQL 驱动程序的文档:https://dev.mysqlserver.cn/doc/connectors/en/apis-php-pdo-mysql.html

例如,我在寻找的 PDO::MYSQL_ATTR_SSL_CA 和 PDO::MYSQL_ATTR_SSL_CAPATH 没有在此页面上列出。
3
Sbastien
3 年前
PDO::FETCH_UNIQUE 不仅获取唯一值,它还使用第一个 SQL 列作为数组键结果,这对于快速创建索引非常有用,例如

<?php

$sql
= <<<SQL
SELECT ALL
c1, -- 用于结果索引
c1, c2
FROM (
VALUES
ROW('ID-1', 'Value 1'),
ROW('ID-2', 'Value 2a'),
ROW('ID-2', 'Value 2b'),
ROW('ID-3', 'Value 3')
) AS t (c1, c2);
SQL;
$result = $pdo->query($sql);
print_r($result->fetchAll(PDO::FETCH_UNIQUE));

/*
给出:
ID-1 => [c1 => ID-1, c2 => Value 1]
ID-2 => [c1 => ID-2b, c2 => Value 2b]
ID-3 => [c1 => ID-3, c2 => Value 3]
*/

?>
0
happy dot job7348 at fastmail dot com
6 个月前
要绑定浮点数,请使用 PDO::PARAM_STR 与 bindValue。 您可以跳过 PDO::PARAM_STR,因为它默认选项。 使用 bindParam 绑定会将绑定变量的类型更改为字符串,这会导致类型错误。
-1
Rexana
1 年前
Todd 提到的 PDO MySQL 常量引用已移至此处:https://php.net/manual/en/ref.pdo-mysql.php

这包括对 PDO::MYSQL_ATTR_SSL_CA、PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT 等常量的文档。
-7
ko dot izawa at gmail dot com
7 年前
当您在 SQLite 上使用 REAL 类型列时,您在 bindValue() 的 pdo 参数设置是 PDO::PARAM_STR。

'''
$stmt->bindValue(':elapse_time', $e_time, PDO::PARAM_STR);
'''
To Top