Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как получить 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 — Преобразует значение в целое число.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.