如何避免将表单发送的数据关联到具有自动增量唯一 ID 的 MySQL 数据库中的可能冲突?

Posted

技术标签:

【中文标题】如何避免将表单发送的数据关联到具有自动增量唯一 ID 的 MySQL 数据库中的可能冲突?【英文标题】:How to avoid a possible conflict associating data sent by a form into a MySQL database with an autoincrement unique id? 【发布时间】:2015-02-26 01:54:03 【问题描述】:

我实际上对 php 和 jQuery 了解不多。我是一名自学成才的程序员,最近我专注于使用 PHP 进行服务器端和 javascript 客户端进行 Web 编程。

AJAX 对我来说是一个相对较新的概念,我只是在做第一次测试。

我会解释我的问题,当然是我想要的,这对很多人来说应该是微不足道的。

我有一个相当长的表单,它有复选框、文本输入、文本区域和选择,此外,我想将 bootstrap file-input plugin 添加到我的表单中。

问题是我想把所有的数据一起发,发数据前后的照片不能发,或者发数据再发照片。

之所以这样,是因为我的数据库是关系型的,需要把数据和图片关联到同一个ID,这个ID必须是自己生成的,是一个自增字段。

假设我有一个名为 data 的表和另一个名为 data_ref_pictures 的表 而在我的表单中,只有名称、性别和年龄这些字段:

data(id, name, gender, age)
data_ref_pictures(id_data, picture_path)

我很担心,因为我认为我的系统是单用户/单用户:-(

假设有 100 个用户在不同的地方,他们同时都在使用表单,假设现在表单已经填写并且照片也被选中(还没有发送任何内容),表单已经准备好发送,所有 100 个用户同时按下提交按钮。

如何知道数据的id号,以免系统出错,混淆用户的数据和图片。

问题是我不知道将用户发送的所有数据和图片与唯一的自动增量ID相关联。

感谢阅读!

【问题讨论】:

解决方案可能取决于您的页面组织,这并不清楚。是否所有数据都以相同的形式发送?如果是这样,按照允许您使用 last_insert_id 的顺序插入所有内容应该很简单。如果没有,您可能需要使用会话处理来跟踪提交的数据。如果图像可能出现在主表中的数据之前,那么您需要一些方法来识别它们来自的用户,直到主表中的数据出现。如果是这样的话,就不那么简单了。 我还是没有设置插件文件-input,我需要用AJAX做,是一样的形式,是的,但不知道是否一起发送。 【参考方案1】:

您可以使用 LAST_INSERT_ID() 函数:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

函数的结果基于活动连接完成的最后一次插入,因此您在插入数据时不应该有冲突。

【讨论】:

以上是关于如何避免将表单发送的数据关联到具有自动增量唯一 ID 的 MySQL 数据库中的可能冲突?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO/MySQL 将自动增量编号附加到电子邮件中发送和发送电子邮件

避免插入失败以避免虚假的自动增量

复合主键?还是具有唯一复合索引的自动增量主键? [关闭]

odi增量更新策略

MySQL atomic insert-if-not-exists 具有稳定的自动增量

如何将 websocket 二进制消息作为流发送到 Google Speech API?