PDO. Использование
Подключение
Подключение к 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