Php 如何在保证没有重复ID的情况下更新多个表?

Php 如何在保证没有重复ID的情况下更新多个表?,php,mysql,Php,Mysql,我习惯于用用户帐户建立网站,因此我可以简单地自动增加用户id,然后让他们登录,同时我在内部通过用户id识别该用户。在这种情况下我需要做的有点不同。我需要匿名地从人们那里收集几行数据,并将这些数据行绑定在一起,这样我就可以很容易地识别哪些数据行属于哪个用户 我遇到的困难是生成将数据行绑定在一起的id。我的第一个想法是轮询数据库以获得存在的最高用户ID,并使用用户ID+1写入数据库。但是,如果两个提交在写入数据库之前对数据库进行轮询,则这将失败-它们将共享相同的用户ID 我的另一个想法是创建一个单独

我习惯于用用户帐户建立网站,因此我可以简单地自动增加用户id,然后让他们登录,同时我在内部通过用户id识别该用户。在这种情况下我需要做的有点不同。我需要匿名地从人们那里收集几行数据,并将这些数据行绑定在一起,这样我就可以很容易地识别哪些数据行属于哪个用户

我遇到的困难是生成将数据行绑定在一起的id。我的第一个想法是轮询数据库以获得存在的最高用户ID,并使用用户ID+1写入数据库。但是,如果两个提交在写入数据库之前对数据库进行轮询,则这将失败-它们将共享相同的用户ID

我的另一个想法是创建一个单独的用户ID表,该表将设置为自动递增,只需生成一个新行,然后轮询该表以获取创建的最后一行的ID。这也失败了,原因与上面相同——如果两个提交人在其中一个轮询最新用户ID之前创建了一行,那么他们最终将共享一个ID


有什么想法吗?我觉得我遗漏了一些明显的东西。

您需要插入用户,获取自动生成的id,然后在需要与父记录关联的两行中将该id用作外键。帽架必须存在,才能在其上悬挂帽子。

您需要插入用户,获取自动生成的id,然后在需要与父记录关联的两行中将该id用作外键。帽架必须存在,你才能在上面挂帽子。

我想我对你的理解是对的;我也有类似的问题。不过,有一个非常方便的php函数。查询数据库以插入新行并自动增加其用户ID后,请执行以下操作:

$user_id = mysql_insert_id();
它只返回当前mysql连接上的上一个查询的自动增量值。如果需要的话,你可以阅读更多关于它的内容


然后,您可以使用它填充第二个表的数据,确保没有人会从第一个表获得重复的ID。

我想我理解您的意思是正确的;我也有类似的问题。不过,有一个非常方便的php函数。查询数据库以插入新行并自动增加其用户ID后,请执行以下操作:

$user_id = mysql_insert_id();
它只返回当前mysql连接上的上一个查询的自动增量值。如果需要的话,你可以阅读更多关于它的内容


然后,您可以使用它填充第二个表的数据,确保没有人会从第一个表中获得重复的ID。

这是一个常见问题,要解决它,您可以使用一个。这给了你一个原子概念,即能够做不止一件事,但它作为一个包与成功或失败联系在一起。这是一个高级数据库功能,需要了解一些更高级的编程,才能以尽可能容错的方式实现它。

这是一个常见问题,要解决它,您可以使用一个。这给了你一个原子概念,即能够做不止一件事,但它作为一个包与成功或失败联系在一起。这是一个高级db功能,需要了解一些更高级的编程,才能以尽可能容错的方式实现它。

没错-困难在于确定我获取的是正确的自动生成ID。当mysql\u insert\u ID()工作时,只要保持同一连接打开,保证是适用于连接的正确连接。只需确保在对连接执行任何其他查询之前(在您关心的插入之后)调用它。没错-困难在于确定我获取的是正确的自动生成ID。当mysql_INSERT_ID()工作时,只要保持相同的连接打开,保证是适用于连接的正确连接。只需确保在对连接执行任何其他查询之前(在您关心的插入之后)调用它。非常有趣、方便!这正是我需要的。你知道函数使用什么样的SQL查询来获取数据吗?还是与先前的插入查询一起返回?文档似乎没有具体说明。它看起来只是调用了这个MySQL函数:请稍等……这不会遇到与我的另外两个想法相同的问题吗?如果在第一个用户的帖子和调用第一个“mysql_insert_id()”之间发布了另一个用户,那么他们仍然会共享一个id!除非ID与原始的insert查询一起返回,并且这个函数只是引用它。不,不用担心。从我链接到的mysql文档中:生成的ID在服务器中基于每个连接进行维护。这意味着函数返回给给定客户机的值是为影响该客户机自动增量列的最新语句生成的第一个自动增量值。此值不受其他客户端的影响,即使它们生成自己的自动增量值。此行为确保每个客户端都可以检索自己的ID,而不必关心其他客户端的活动,也不需要锁或事务。太好了,谢谢!我没有看到你关于MySQL函数的帖子,否则我自己会仔细阅读的。非常有趣,而且很方便!这正是我需要的。你知道函数使用什么样的SQL查询来获取数据吗?还是与先前的插入查询一起返回?文档似乎没有具体说明。它看起来只是调用了这个MySQL函数:请稍等……这不会遇到与我的另外两个想法相同的问题吗?如果在第一个用户的帖子和调用第一个“mysql_insert_id()”之间发布了另一个用户,那么他们仍然会共享一个id!除非ID与原始的insert查询一起返回,并且这个函数只是引用它。不,不是