It should be noted that PDO::FETCH_CLASS will call the constructor *after* setting the values (or calling __set).
The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime.
PDO uses class constants since PHP 5.1. Prior releases use global constants
in the form PDO_PARAM_BOOL
.
PDO::PARAM_BOOL
(integer)
PDO::PARAM_NULL
(integer)
PDO::PARAM_INT
(integer)
PDO::PARAM_STR
(integer)
PDO::PARAM_LOB
(integer)
PDO::PARAM_STMT
(integer)
PDO::PARAM_INPUT_OUTPUT
(integer)
PDO::FETCH_LAZY
(integer)
PDO::FETCH_LAZY
creates the object variable names as they are accessed.
Not valid inside PDOStatement::fetchAll().
PDO::FETCH_ASSOC
(integer)
PDO::FETCH_ASSOC
returns
only a single value per column name.
PDO::FETCH_NAMED
(integer)
PDO::FETCH_NAMED
returns
an array of values per column name.
PDO::FETCH_NUM
(integer)
PDO::FETCH_BOTH
(integer)
PDO::FETCH_OBJ
(integer)
PDO::FETCH_BOUND
(integer)
PDO::FETCH_COLUMN
(integer)
PDO::FETCH_CLASS
(integer)
Зауваження: The magic __set() method is called if the property doesn't exist in the requested class
PDO::FETCH_INTO
(integer)
PDO::FETCH_FUNC
(integer)
PDO::FETCH_GROUP
(integer)
PDO::FETCH_COLUMN
or
PDO::FETCH_KEY_PAIR
.
PDO::FETCH_UNIQUE
(integer)
PDO::FETCH_KEY_PAIR
(integer)
PDO::FETCH_CLASSTYPE
(integer)
PDO::FETCH_SERIALIZE
(integer)
PDO::FETCH_INTO
but object is provided as a serialized string.
Available since PHP 5.1.0. Since PHP 5.3.0 the class constructor is never called if this
flag is set.
PDO::FETCH_PROPS_LATE
(integer)
PDO::ATTR_AUTOCOMMIT
(integer)
FALSE
, PDO attempts to disable autocommit so that the
connection begins a transaction.
PDO::ATTR_PREFETCH
(integer)
PDO::ATTR_TIMEOUT
(integer)
PDO::ATTR_ERRMODE
(integer)
PDO::ATTR_SERVER_VERSION
(integer)
PDO::ATTR_CLIENT_VERSION
(integer)
PDO::ATTR_SERVER_INFO
(integer)
PDO::ATTR_CONNECTION_STATUS
(integer)
PDO::ATTR_CASE
(integer)
PDO::ATTR_CURSOR_NAME
(integer)
PDO::ATTR_CURSOR
(integer)
PDO::CURSOR_FWDONLY
and
PDO::CURSOR_SCROLL
. Stick with
PDO::CURSOR_FWDONLY
unless you know that you need a
scrollable cursor.
PDO::ATTR_DRIVER_NAME
(string)
Приклад #1 using 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
(integer)
PDO::ATTR_PERSISTENT
(integer)
PDO::ATTR_STATEMENT_CLASS
(integer)
PDO::ATTR_FETCH_CATALOG_NAMES
(integer)
PDO::ATTR_FETCH_TABLE_NAMES
(integer)
PDO::ATTR_STRINGIFY_FETCHES
(integer)
PDO::ATTR_MAX_COLUMN_LEN
(integer)
PDO::ATTR_DEFAULT_FETCH_MODE
(integer)
PDO::ATTR_EMULATE_PREPARES
(integer)
PDO::ERRMODE_SILENT
(integer)
PDO::ERRMODE_WARNING
(integer)
E_WARNING
message if an error occurs.
See Errors and error handling
for more information about this attribute.
PDO::ERRMODE_EXCEPTION
(integer)
PDO::CASE_NATURAL
(integer)
PDO::CASE_LOWER
(integer)
PDO::CASE_UPPER
(integer)
PDO::NULL_NATURAL
(integer)
PDO::NULL_EMPTY_STRING
(integer)
PDO::NULL_TO_STRING
(integer)
PDO::FETCH_ORI_NEXT
(integer)
PDO::FETCH_ORI_PRIOR
(integer)
PDO::FETCH_ORI_FIRST
(integer)
PDO::FETCH_ORI_LAST
(integer)
PDO::FETCH_ORI_ABS
(integer)
PDO::FETCH_ORI_REL
(integer)
PDO::CURSOR_FWDONLY
(integer)
PDO::CURSOR_SCROLL
(integer)
PDO::ERR_NONE
(string)
PDO::PARAM_EVT_ALLOC
(integer)
PDO::PARAM_EVT_FREE
(integer)
PDO::PARAM_EVT_EXEC_PRE
(integer)
PDO::PARAM_EVT_EXEC_POST
(integer)
PDO::PARAM_EVT_FETCH_PRE
(integer)
PDO::PARAM_EVT_FETCH_POST
(integer)
PDO::PARAM_EVT_NORMALIZE
(integer)
It should be noted that PDO::FETCH_CLASS will call the constructor *after* setting the values (or calling __set).
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.
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
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]
*/
?>
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
When you use REAL type column on SQLite, your setting of pdo parameter of bindValue() is PDO::PARAM_STR.
'''
$stmt->bindValue(':elapse_time', $e_time, PDO::PARAM_STR);
'''