Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php LAST_INSERT_ID()它在多用户环境中的工作方式_Php_Mysql - Fatal编程技术网

Php LAST_INSERT_ID()它在多用户环境中的工作方式

Php LAST_INSERT_ID()它在多用户环境中的工作方式,php,mysql,Php,Mysql,首先检查该问题: 我得到这个函数“LAST\u INSERT\u ID()”执行所需的 问题是:我在php脚本中使用它,如果某个用户在“table1”中插入数据,在他将“id”插入“table2”之前,另一个用户将数据插入“table1”…那么函数将为第一个用户检索哪个“id”,他的id还是第二个用户的id“最后一个”? 我希望检索用户自己“第一个用户”插入的“id”,因此,如果它没有实现,该如何做 LAST\u INSERT\u ID()为您提供在执行它的连接上自动生成的最后一个ID,它不会

首先检查该问题:

我得到这个函数“LAST\u INSERT\u ID()”执行所需的
问题是:我在php脚本中使用它,如果某个用户在“table1”中插入数据,在他将“id”插入“table2”之前,另一个用户将数据插入“table1”…那么函数将为第一个用户检索哪个“id”,他的id还是第二个用户的id“最后一个”?

我希望检索用户自己“第一个用户”插入的“id”,因此,如果它没有实现,该如何做

LAST\u INSERT\u ID()为您提供在执行它的连接上自动生成的最后一个ID,它不会返回MySQL服务器全局生成的最后一个INSERT ID。

永远不要将lastInsertId()用于PostgreSQL序列,尤其是当应用程序的INSERT/update负载较高时。PostgreSQL序列是非事务性的(这是一种自然的设计特性,可以避免独占锁定,否则会产生不可接受的性能)。这意味着任何以相同顺序递增的并发事务都将使lastInsertId()返回的值相对于事务的最后一次插入无效。例如:

Transaction 1 inserts with nextval('some_seq') yielding 100;
Concurrent transaction 2 inserts with nextval('some_seq') yielding 101;
Transaction 1 calls lastInsertId(), expecting 100, BUT GETS 101.
这种PDO方法对于PostgreSQL来说是死板的,请始终使用INSERT。。。而是返回。问候


而且(非常)好的做法是在查询后立即调用它。这样你就不会错了。如果这样做有问题,您可能需要重新考虑代码。注意:每个MySQL连接只属于一个用户,因此存在1对1的关系。在这种情况下,
lastInsertId
将始终返回用户最后一个自动生成的id。但对于共享MySQL连接,您必须使用事务来获取正确的
lastInsertId
,因为共享连接具有1对N的关系。这是如何回答问题的?问题是关于MySQL函数的,它被清楚地标记了,而不是
postgresql