Как PDO узнает последний вставленный идентификатор в MySQL?

РЕДАКТИРОВАТЬ: Первоначально заголовок этого вопроса был: Как Doctrine узнает последний вставленный идентификатор в MySQL? и был связан с Доктрина ORM mapper. Покопавшись, я обнаружил, что этот вопрос не относится к Doctrine , а к PDO_MySQL , MySQL C API и, наконец, к обмену данными клиент-сервер MySQL. Я решил изменить название, так что, возможно, кто-то найдет ответ на свой вопрос.

Для тех, кто не использует Doctrine: Мне было любопытно, почему ниже:

mysql_query("INSERT INTO category (name) VALUES('cat')");
echo mysql_insert_id();

или подобное:

$pdo->exec("INSERT INTO category (name) VALUES('cat')");
echo $pdo->lastInsertId();

приведет к только одной позиции (без отдельного SELECT LAST_INSERT_ID () ) в журнале:

1701 Query    INSERT INTO category (name) VALUES ('cat')

Исходный вопрос:

У меня есть 2 таблицы:

category(id,name)
product(id, name, categoryId)

Я создал новый объект категории и продукт объект. Я назначил объект категории объекту продукта. Я не устанавливал никаких идентификаторов:

$product = new Product();
$product->name = 'asdf';

$category = new Category();
$category->name = 'cat';

$product->Category = $category;

После этого я сбросил соединение и проверил журналы MySQL:

1684 Query  START TRANSACTION
1684 Query  INSERT INTO category (name) VALUES ('cat')
1684 Query  INSERT INTO product (name, categoryid) VALUES ('asdf', '312')
1684 Query  COMMIT

Как Doctrine узнала, что новый идентификатор категории - 312? В журналах больше ничего нет.

14
задан prostynick 24 November 2010 в 21:04
поделиться