PHP 8.0.3 Released!

Предопределённые константы

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение было подгружено во время выполнения.

Внимание

PDO использует константы класса с PHP 5.1. До этого использовались глобальные константы в форме PDO_PARAM_BOOL.

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)
Представляет тип recordset. На данный момент не поддерживается драйверами.
PDO::PARAM_INPUT_OUTPUT (int)
Указывает, что параметр является параметром INOUT для хранимой процедуры. Для задания типа данных необходимо применить побитовое ИЛИ этой константы с константой типа PDO::PARAM_*.
PDO::FETCH_LAZY (int)
Указывает, что метод, осуществляющий выборку данных, должен возвращать каждую строку выборки в виде объекта, в котором имена переменных соответствуют именам столбцов результирующего набора. PDO::FETCH_LAZY создаёт объект с такими же именами переменных, с которыми осуществлялась выборка. Константа недействительна для функции 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 и присваивать значения столбцов таблицы переменным PHP, которые были привязаны методами PDOStatement::bindParam() или PDOStatement::bindColumn().
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)
Выборка из двух столбцов будет помещена в массив, в котором значения первого столбца принимаются за ключи, а значения второго - за значения. Константа доступна с версии PHP 5.2.3.
PDO::FETCH_CLASSTYPE (int)
Определение имени класса по значению первого столбца.
PDO::FETCH_SERIALIZE (int)
Аналогична PDO::FETCH_INTO, но объект представлен в виде сериализованной строки. Константа доступна с версии PHP 5.1.0. С версии PHP 5.3.0 конструктор класса не будет вызван, если этот флаг установлен.
PDO::FETCH_PROPS_LATE (int)
Вызывать конструктор до установки свойств. Константа доступна с версии PHP 5.2.0.
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 (string)
Возвращает имя драйвера.

Пример #1 Пример использования PDO::ATTR_DRIVER_NAME

<?php
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
  echo 
"Работаем с mysql; делаем что-то специфичное для mysql\n";
}
?>

PDO::ATTR_ORACLE_NULLS (int)
Преобразование пустых строк в SQL NULL в выборках.
PDO::ATTR_PERSISTENT (mixed)
Запрашивать постоянное соединение вместо создания нового подключения. Подробнее об этом атрибуте см. раздел Подключения и управление подключениями.
PDO::ATTR_STATEMENT_CLASS (int)
Устанавливает имя класса, для которого возвращаются запросы (statements).
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)
Константа доступна с версии PHP 5.2.0
PDO::ATTR_EMULATE_PREPARES (int)
Константа доступна с версии PHP 5.1.3.
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.)
add a note add a note

User Contributed Notes 6 notes

up
21
sam at xnet dot tk
8 years ago
It should be noted that PDO::FETCH_CLASS will call the constructor *after* setting the values (or calling __set).
up
3
todd at toddwiggins dot com dot au
1 year 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.
up
1
kevin at kevinlocke dot name
1 year 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
up
2
Sbastien
4 months 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]
*/

?>
up
1
Oleg Andreyev
4 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
up
-2
ko dot izawa at gmail dot com
4 years ago
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);
'''
To Top