首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO如何知道最后一次在MySQL中插入id?

PDO如何知道最后一次在MySQL中插入id?
EN

Stack Overflow用户
提问于 2010-11-24 13:50:10
回答 3查看 9K关注 0票数 14

编辑:这个问题标题原来是:原则如何知道在MySQL中最后插入的id?并与ORM理论有关。经过深入研究,我发现这个问题与理论无关,而是与PDO_MySQL、MySQL C有关,最后与MySQL客户机-服务器通信有关。我决定改变标题,所以也许有人会找到答案。

对于那些不使用原则的人:我很好奇,为什么要这样说:

代码语言:javascript
复制
mysql_query("INSERT INTO category (name) VALUES('cat')");
echo mysql_insert_id();

或类似的:

代码语言:javascript
复制
$pdo->exec("INSERT INTO category (name) VALUES('cat')");
echo $pdo->lastInsertId();

只会导致日志中的一个位置(没有单独的SELECT LAST_INSERT_ID()):

代码语言:javascript
复制
1701 Query    INSERT INTO category (name) VALUES ('cat')

原始问题:

我有两张桌子:

代码语言:javascript
复制
category(id,name)
product(id, name, categoryId)

我创建了新的类别对象和产品对象。我将类别对象分配给产品对象。我没有设置任何身份证:

代码语言:javascript
复制
$product = new Product();
$product->name = 'asdf';

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

$product->Category = $category;

之后,我刷新了连接并检查了MySQL日志:

代码语言:javascript
复制
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?日志里没有别的东西了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-24 20:39:31

我做了一些研究,浏览了一些源代码,所以我的答案可能有点错误,而且不精确。

首先,这与学说并没有真正的关系。教义使用PDO_MYSQL。但是在内部,PDO_MYSQL使用与mysql_insert_id函数相同的东西--原生MySQL C函数- mysql_insert_id

之所以没有单独的SELECT LAST_INSERT_ID(),是因为在执行语句之后(在我的示例INSERT中),服务器使用数据和OK包中包含的其他内容进行响应,包括insert_id。因此,当我们触发mysql_insert_id()时,我们没有连接到服务器,为了接收insert_id - mysql库不需要这样做-它已经从上次执行查询时存储了这个值(至少在分析了文件libmysql.c之后是这样的)。

OK数据包在这里描述:MySQL通用响应包- OK数据包

票数 23
EN

Stack Overflow用户

发布于 2010-11-24 13:53:39

票数 1
EN

Stack Overflow用户

发布于 2010-11-24 18:26:00

last_insert_id只适用于AUTO_INCREMENT列。如果手动将值插入AUTO_INCREMENT列,它将无法工作。

这个理论会起作用,因为它就像给它分配一个NULL (尽管你从来没有专门写过)。这将触发自动增量,并为last_insert_id()提供一个值。

我在这里加了一个jpg,这样你就可以看到它了。希望能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4267470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档