Как получить id добавленной записи
Короткий ответ
Метод lastInsertId() возвращает идентификатор последней добавленной строки:
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE products (id INTEGER PRIMARY KEY, title TEXT, price INTEGER)');
$pdo->exec("INSERT INTO products (title, price) VALUES ('Tea', 250), ('Coffee', 400), ('Juice', 180), ('Green tea', 300)");
$statement = $pdo->prepare('INSERT INTO products (title, price) VALUES (?, ?)');
$statement->execute(['Cocoa', 320]);
echo $pdo->lastInsertId();Результат:
5Связанные записи
Идентификатор нужен, чтобы сразу добавить зависимые строки:
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE orders (id INTEGER PRIMARY KEY, customer TEXT)');
$pdo->exec('CREATE TABLE order_items (id INTEGER PRIMARY KEY, order_id INTEGER, title TEXT)');
$pdo->prepare('INSERT INTO orders (customer) VALUES (?)')->execute(['Anna']);
$orderId = (int) $pdo->lastInsertId();
$item = $pdo->prepare('INSERT INTO order_items (order_id, title) VALUES (?, ?)');
foreach (['Tea', 'Coffee'] as $title) {
$item->execute([$orderId, $title]);
}
echo $pdo->query("SELECT COUNT(*) FROM order_items WHERE order_id = $orderId")->fetchColumn();Результат:
2Функции из этого ответа
- PDO — Подключение к базе данных.
- PDOStatement — Подготовленный запрос и его результат.
- intval — Преобразует значение в целое число.