Php 可以在我的数据库中逐个提交请求吗?或者按数组提交整个

Php 可以在我的数据库中逐个提交请求吗?或者按数组提交整个,php,mysql,arrays,database,transactions,Php,Mysql,Arrays,Database,Transactions,我正在创建一个调查问卷web应用程序 我想知道是否最好在我的数据库中一个接一个地提交用户的每个答案(这意味着更多的请求),或者我只是将每个答案存储在一个数组中,当问题已经完成时,我会将其作为一个整体提交,这样就只有一个请求 软件的复杂性、性能和ACID含义是什么 执行一系列插入操作,每个问题一个,vs 只进行一次多行插入 这有什么区别吗?对我来说,这取决于最后请求的大小和用户行为。 考虑到第一个选项,如果他在结束前离开,至少你已经存储了第一个问题。如果它对您的分析有任何价值,您可以这样做。

我正在创建一个调查问卷web应用程序

我想知道是否最好在我的数据库中一个接一个地提交用户的每个答案(这意味着更多的请求),或者我只是将每个答案存储在一个数组中,当问题已经完成时,我会将其作为一个整体提交,这样就只有一个请求

软件的复杂性、性能和ACID含义是什么

  • 执行一系列插入操作,每个问题一个,vs
  • 只进行一次多行插入

这有什么区别吗?

对我来说,这取决于最后请求的大小和用户行为。 考虑到第一个选项,如果他在结束前离开,至少你已经存储了第一个问题。如果它对您的分析有任何价值,您可以这样做。
如果你在最后发送了一个请求,对我来说这也是一个解决方案,那么请注意它的大小。但是如果用户在离开之前离开,您就会丢失这些信息。

tl;dr使用事务

我猜你想知道这是否

INSERT INTO answers (person_id, quiz_id, question_id, answer)
       VALUES (111,222,1,"yes");
INSERT INTO answers (person_id, quiz_id, question_id, answer)
       VALUES (111,222,2,"no");
比这好还是坏

INSERT INTO answers (person_id, quiz_id, question_id, answer)
       VALUES (111,222,1,"yes"),
              (111,222,2,"no");
我建议第二种选择。为什么?

  • 这就是所谓的在一个地方进行的。也就是说,这一切同时发生,如果由于某种原因失败了,那么一切都失败了。(这种原子具有“不可分割”的感觉,而不是“核能”的感觉。)
  • MySQL服务器的工作量稍微少一些,因为事务需要工作;第一个选项(在我的示例中)有两个隐式事务,第二个只有一个
但是,必须指出的是,编程第二个选项对您来说需要更多的工作,特别是如果您参数化INSERT查询(,)以避免。你应该避免。因为网络令人毛骨悚然

这里有一个很好的中间路线,可以让您获得第一选择的编程简单性优势,以及第二选择的原子性和性能优势

START TRANSACTION;
INSERT INTO answers (person_id, quiz_id, question_id, answer)
       VALUES (111,222,1,"yes");
INSERT INTO answers (person_id, quiz_id, question_id, answer)
       VALUES (111,222,2,"no");
COMMIT;

所以我应该继续我的第二个选择,对吗?这就是我现在正在做的,我意识到,要求越多,成本就越高。这就是为什么我试图最大化我正在做的请求。不,我的建议是,为了编程和测试的简单性,使用您的第一个选项。但将插入操作包装在启动事务中;/犯罪这样做将使您的第一个选项与第二个选项一样有效。在实践中,提交是MySQL服务器的一项重要工作,如果不启动事务,您的第一个选项会有多个隐式提交,因此MySQL服务器的负担会稍微重一些。恕我直言,这个问题的答案不是意见问题。这是一个性能和原子性的问题。从一个新的SQLer来看,这是一个好问题。请重新考虑一下。你好,先生,我不是真的想征求意见,但我在问什么是最好的方法?我想我的问题对像我这样的初学者有很大的帮助。