gpt4 book ai didi

php - 当多个用户在短时间窗口内完成时,堆叠查询是否有可能在彼此之间偷偷摸摸?

转载 作者:行者123 更新时间:2023-11-29 01:37:44 25 4
gpt4 key购买 nike

我觉得这很难解释,但请考虑以下情况:

您的网站有两个插入查询,它们彼此紧接着加载,中间可能有一些变量声明和 for 循环,但除了这两个查询之外没有其他查询:

$mysqli->doQuery("INSERT INTO `company_order`(`customer_id`, `item_id`) 
VALUES ($givenid, $givenproduct")
// This table has a primary key that gets defined using auto_increment.

/* (loop that defines array with 50~ variables, few names that get defined in object variables) */

$mysqli->doQuery("INSERT INTO `customer_orderlist`(`customer_id`,`order_id`)
VALUES ($givenid, (LAST_INSERT_ID()) ")

想象一下,如果两个用户加载了几乎紧接着彼此执行这些查询的相同功能。是否存在一个用户可能从另一个用户获取最后插入的 ID 的风险,或者是否保证查询将按顺序执行,而不会在它们之间调用任何其他查询?

最佳答案

MySQL 函数 LAST_INSERT_ID()作为在当前连接上执行的最近成功的 INSERT 语句的结果,返回为 AUTO INCREMENT 列成功插入的第一个自动生成的值。

该值由服务器存储在每个连接的基础上。这保证了 LAST_INSERT_ID() 在您的第二个查询中返回的值是在您的第一个查询中为 AUTO INCREMENT 列生成的值,无论有多少其他 INSERT 查询在其他连接上的这两个查询之间运行。

回答您的问题:

is it guaranteed that the queries will be executed in order without any other queries getting called in between them?

不,没有这样的保证。查询按照您将它们发送到服务器的顺序执行,但您的连接不会阻止其他连接执行它们自己的查询(反之亦然)。

Is there a risk that one user might get the last inserted ID from the other user

没有。只要两个查询(自动生成 AUTO INCREMENT 值的 INSERT 和调用 LAST_INSERT_ID() 的查询就没有这种风险) 在同一连接上运行(并且没有其他 INSERT 查询在同一连接上在它们之间运行)。

关于php - 当多个用户在短时间窗口内完成时,堆叠查询是否有可能在彼此之间偷偷摸摸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35479429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com