【发布时间】:2011-05-15 03:01:45
【问题描述】:
编辑:这个问题的标题最初是:Doctrine 如何知道 MySQL 中最后插入的 id? 并且与 Doctrine ORM 映射器有关。经过一番挖掘,我发现这个问题与 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)
我创建了新的类别对象和产品对象。我将类别对象分配给产品对象。我没有设置任何ID:
$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 怎么知道新创建的类别 id 是 312?日志中没有其他内容。
【问题讨论】:
标签: php mysql doctrine pdo communication-protocol