预定义常量
下列常量由此扩展定义,且仅在此扩展编译入 PHP 或在运行时动态载入时可用。
-
PDO::PARAM_BOOL
(int) - 表示布尔数据类型。
-
PDO::PARAM_NULL
(int) - 表示 SQL 中的 NULL 数据类型。
-
PDO::PARAM_INT
(int) - 表示 SQL 中的整型。
-
PDO::PARAM_STR
(int) - 表示 SQL 中的 CHAR、VARCHAR 或其他字符串类型。
-
PDO::PARAM_STR_NATL
(int) - 标记了字符使用的是国家字符集(national character set)。 自 PHP 7.2.0 起。
-
PDO::PARAM_STR_CHAR
(int) - 标记了字符使用的是常规字符集(regular character set)。 自 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_ASSOC
每个列名 返回一个包含值的数组。 -
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_COLUMN
或PDO::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) - 设置返回的 statement 类名。
-
PDO::ATTR_FETCH_CATALOG_NAMES
(int) - 将包含的目录名添加到结果集中的每个列名前面。目录名和列名由一个小数点分开(.)。此属性在驱动层面支持,所以有些驱动可能不支持此属性。
-
PDO::ATTR_FETCH_TABLE_NAMES
(int) - 将包含的表名添加到结果集中的每个列名前面。表名和列名由一个小数点分开(.)。此属性在驱动层面支持,所以有些驱动可能不支持此属性。
-
PDO::ATTR_STRINGIFY_FETCHES
(int) -
强制将所有获取的值(
null
除外)视为字符串。除非将PDO::ATTR_ORACLE_NULLS
设置为PDO::NULL_TO_STRING
,否则null
值保持不变。 -
PDO::ATTR_MAX_COLUMN_LEN
(int) - 设置字段名最长的尺寸。
-
PDO::ATTR_DEFAULT_FETCH_MODE
(int) -
PDO::ATTR_EMULATE_PREPARES
(int) -
PDO::ATTR_DEFAULT_STR_PARAM
(int) -
设置默认 string 参数类型可以是
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() 创建的函数是确定性的(deterministic)。举例说明:在同一个 SQL 语句内,函数的参数不变,则返回的结果也不变。(PHP 7.1.4 起有效)
+添加备注
用户贡献的备注 6 notes
sam at xnet dot tk ¶
12 years ago
It should be noted that PDO::FETCH_CLASS will call the constructor *after* setting the values (or calling __set).
kevin at kevinlocke dot name ¶
5 years ago
PDO::PARAM_STR_CHAR and PDO::PARAM_STR_NATL must be combined with PDO::PARAM_STR using bitwise-OR for parameter binding.
These flags control value quoting (e.g. PDO::quote) and, in some situations (see below), parameter binding (e.g. PDO::bindParam, PDO::bindValue) to prefix string literals with N'' as defined in SQL-92. As of PHP 7.3, only dblib and mysql support these flags. For the mysql driver, the flags only affect parameter binding when PDO::ATTR_EMULATE_PREPARES is true (the default).
MySQL and MariaDB interpret string literals prefixed with N as being utf8 (not utf8mb4) regardless of `SET NAMES` or the charset parameter. This can cause problems if the database/table/column charset is not utf8. For example, in a database using utf8mb4, the query "SELECT * FROM table WHERE col = :param" and bindValue(":param", "\u{1F600}", PDO::PARAM_STR | PDO::PARAM_STR_NATL) will cause "PDOException: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='". Using PDO::PARAM_STR without PDO::PARAM_STR_NATL and ensuring the charset DSN parameter is set correctly can avoid this issue.
See:
https://wiki.php.net/rfc/extended-string-types-for-pdo
https://mariadb.com/kb/en/library/string-literals/
https://dev.mysql.com/doc/refman/8.0/en/string-literals.html
Oleg Andreyev ¶
8 years ago
Default value for \PDO::ATTR_TIMEOUT is 30 seconds.
Ref.: https://github.com/php/php-src/blob/PHP-7.1.0/ext/pdo_mysql/mysql_driver.c#L600
Sbastien ¶
4 years ago
PDO::FETCH_UNIQUE not only fetches the unique values, it also uses the first SQL column as array key result, what is very useful for create quickly an index, eg :
<?php
$sql = <<<SQL
SELECT ALL
c1, -- For result indexing
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));
/*
Gives :
ID-1 => [c1 => ID-1, c2 => Value 1]
ID-2 => [c1 => ID-2b, c2 => Value 2b]
ID-3 => [c1 => ID-3, c2 => Value 3]
*/
?>
todd at toddwiggins dot com dot au ¶
5 years ago
Reference to all the PDO::MYSQL_* constants is available in MySQL's documentation for the driver here: https://dev.mysql.com/doc/connectors/en/apis-php-pdo-mysql.html
Such as the ones I was looking for PDO::MYSQL_ATTR_SSL_CA and PDO::MYSQL_ATTR_SSL_CAPATH which are not listed on this page.
happy dot job7348 at fastmail dot com ¶
1 year ago
To bind a float, use PDO::PARAM_STR with bindValue. You can skip the PDO::PARAM_STR because it's the default option. Binding with bindParam will change the type of the bound variable to a string, which can lead to type errors.