Php 如何防止返回我刚刚存储的值

Php 如何防止返回我刚刚存储的值,php,mysql,Php,Mysql,我正在编写一个审计平台,我可以看到我自己陷入了通常的陷阱 答案表: SitePeriodID 问题ID 回答 评论 评论表: SitePeriodID 问题ID CommentID 评论 所有问题都有答案,但并非所有问题都有评论。具体来说,用户只需要在选择某个答案时输入注释。我希望将答案和注释分开,因为我将来可能会实现从答案中分别检索某个区域的所有注释的功能。如果全部都在一张表上,我将不得不在数千行中查找评论也与站点和时间相匹配的问题 所以,在存储数据时,我通常会这样做。此时,SitePerio

我正在编写一个审计平台,我可以看到我自己陷入了通常的陷阱

答案表:

SitePeriodID
问题ID
回答
评论

评论表:

SitePeriodID
问题ID
CommentID
评论

所有问题都有答案,但并非所有问题都有评论。具体来说,用户只需要在选择某个答案时输入注释。我希望将答案和注释分开,因为我将来可能会实现从答案中分别检索某个区域的所有注释的功能。如果全部都在一张表上,我将不得不在数千行中查找评论也与站点和时间相匹配的问题

所以,在存储数据时,我通常会这样做。此时,SitePeriodID将已知:

Insert into comments (CommentID, Comment) Values (NULL, Comment)
commentid = Get from comments where SitePeriodID = X and QuestionID = Y
Insert into answers (SitePeriodID, QuestionID, Answer, CommentID) Values (SitePeriodID, QuestionID, Answer, commentid['CommentID'])
我所做的基本上是在数据库中存储一些东西,然后立即再次调用它


我很确定我在这里遇到的是一个XY问题,我过度思考了数据库设置,但我想知道是否有办法避免上述问题。

有一个MySQL函数,它是call
LAST\u INSERT\u ID()
,它恢复插入到基中的最后一项的ID。你能行

SELECT LAST_INSERT_ID() FROM mytable;
你会得到一个简单的整数


仅供参考,您应该在
事务中使用它,这样您就可以确定它是您的
最后一个插入id()
而不是另一个用户插入的id。

通过“立即再次调用”您的意思是只需要insert语句生成的动态标识符吗
LAST\u INSERT\u ID()
可能就是您要查找的内容。这可能会有帮助:,以及许多其他相关的问题和示例。
MySQL中的last_insert_id()
实际上是每个客户端的,因此除非您断开与服务器的连接并再次连接(无论如何,您不应该在同一请求中执行此操作),您将始终获得最后一个id。很抱歉,您的答案与我上周工作时遇到的问题不匹配。如果您不在事务中(自动提交模式被禁用),并且如果有人连接并应用其更改而自己不在事务中,则您选择的
last\u insert\u id
可能发生在另一个人插入之后,因此您获得了错误的id。问题在于您对另一个人的查询的影响。“生成的ID在服务器中按每个连接进行维护。这意味着函数返回给给定客户机的值是为影响该客户机自动增量列的最新语句生成的第一个自动增量值。“发件人:我听到了(我相信你先说的,你不必告诉我原始报价).但我的意思是,由于一些未知的原因,这与数据库的行为不匹配。编辑:我现在知道了:我们的应用程序每次都使用相同的登录名进行连接;这可能就是原因。