PDO. Использование

Категория: DataBase

Подключение

Подключение к MySQL БД:

$dsn = 'mysql:host=localhost;dbname=DATABASE;charset=UTF8';
$options = [
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
$pdo = new PDO($dsn, 'USER', 'PASS', $options);

Запросы

Пример получения записей

$stmt = $pdo->query('SELECT name FROM users');
while ($row = $stmt->fetch()) { /* do some */ }

Позиционные параметры

$stmt = $pdo->prepare('SELECT * FROM product WHERE sku = ? AND status=?');
$stmt->execute([$sku, $status]);

Именованные параметры

$stmt = $pdo->prepare('SELECT * FROM product WHERE column = :p1');
$success = $stmt->execute([':p1' => 'val']);
Примечание

В execute() все параметры приводятся к строкам (PDO::PARAM_STR).

Биндинг параметров

Задать параметрам значение:

$stmt->bindValue(':name', 'value', PDO::PARAM_STR); // именованные параметрами
$stmt->bindValue(1, 'value', PDO::PARAM_STR);       // не именованные (с 1) 

Связать параметр с переменной (по ссылке):

$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(1, $id, PDO::PARAM_INT);

Извлечение данных

Установить режим извлечения данных по умолчанию:

$success = $stmt->setFetchMode(PDO::FETCH_CLASS, 'ClassName', [/* Аргументы конструктора */]);

Режимы извлечения результата

PDO::FETCH_ASSOC    Ассоциативный массив (алиас \PDO::FETCH_NAMED)
PDO::FETCH_NUM      Массив, индексированный номерами столбцов (с 0) 
PDO::FETCH_OBJ      Простая структура (stdClass Object) с публичными свойствами
PDO::FETCH_CLASS    Объект заданного типа. Установит публичные свойства или вызовет __set()
PDO::FETCH_FUNC     Вернуть результат ф-ции, которой передаются все поля записи (fetchAll only)
PDO::FETCH_UNIQUE   Извлечь уникальные записи (по первой колонке, значение которой будет ключем)
PDO::FETCH_LAZY     Извлечь запись как PDORow Object (not fetchAll)
PDO::FETCH_GROUP    Массив значений, сгруппированных по значению N-й колонки
PDO::FETCH_KEY_PAIR Вернуть массив ключ => значение (запрос должен вернуть только 2 колонки)

Комбинирование режимов

Извлечь все записи как ассоциативные массивы:

$stmt->fetchAll(PDO::FETCH_ASSOC);

Первое значение поля - ключ массива в который вложены остальные поля:

$stmt->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE);

Колонка всех записей как плоский массив:

$stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_NUM, 0);

Извлечь все значения первой колонки:

$stmt->fetchAll(PDO::FETCH_COLUMN, 0);                    // плоский массив значений колонки
$stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_UNIQUE, 3); // 1-е поле - ключ, 4-е - значение

Методы извлечения результата

Извлечение каждой следующей записи (как ассоциативного массив):

$stmt->fetch(PDO::FETCH_ASSOC);

Получить следующую запись как stdObject:

$stmt->fetchObject('stdClass', $arr_args_for_constructor);

Возвращает значение указанного столбца последующей строки или false:

$stmt->fetchColumn(0);
Внимание!

При использовании fetchColumn() для извлечения данных из результирующего набора невозможно получить значение другого столбца той же строки.

Подсчитать количество строк:

$stmt->rowCount();

#PDO, #prepare statement, #DB, #ORM

категория: DataBase