CakeFest 2024: The Official CakePHP Conference

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

Модуль определяет перечисленные ниже константы и открывает к ним доступ только тогда, когда модуль либо собрали в 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)
Представляет тип recordset. На данный момент не поддерживается драйверами.
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 и присваивать значения столбцов таблицы переменным 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)
Выборка из двух столбцов будет помещена в массив, в котором значения первого столбца принимаются за ключи, а значения второго — за значения.
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 (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)
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.)
add a note

User Contributed Notes 8 notes

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

?>
up
5
Oleg Andreyev
7 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
0
happy dot job7348 at fastmail dot com
2 months 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.
up
0
Rexana
1 year ago
Reference for PDO MySQL constants Todd mentioned have moved to here: https://www.php.net/manual/en/ref.pdo-mysql.php

This includes documentation on constants like PDO::MYSQL_ATTR_SSL_CA, PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT, and more.
up
-5
ko dot izawa at gmail dot com
7 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