我想运行mysql查询来插入来自自定义html表单的数据。在这里我必须插入多组数据,一些数据到一个表中,一些数据到另一个表中。目前我正在使用jqueryajax将数据发送到php页面并运行多个 mysqli_query()
功能一个接一个。但是我猜当用户数量很大的时候,就会出现与速度有关的问题。所以有谁能给我一个更好的方法来做同样的事。
数据库中有5个表,每个表有7到10列,每次都需要获得不同的数据集。
我只想在上一个insert查询成功完成时运行每个查询。这就是为什么我每次都检查结果,然后运行下一个查询,这让我感觉到在大量用户基础上的速度问题。
3条答案
按热度按时间hrirmatl1#
问题是,我需要将数据插入到第一个表中,如果插入成功,则只对第二个表运行查询。
这意味着你需要一笔交易。
事务是一组查询,要么全部执行ok,要么其中一个失败—它们全部失败。这是为了确保表中不会出现垃圾数据。
不要
不要使用多重查询。
不要使用
mysql_*
功能。不要使用批量插入。
告诉你这样做的人完全不知道他们在做什么,忽略他们。
做
使用pdo
使用准备好的语句
准备一次语句,多次使用
示例代码-不复制粘贴
只有在两个插入都成功的情况下,上面的代码才会将数据保存在两个表中。
wnrlj8wa2#
您可以使用php函数multi\u query来运行多个查询,并使用mysqli\u more\u result、mysqli\u next\u result获得查询结果。
uelo1irk3#
重新解释接受的答案,但重点放在mysqli上。
关键是配置mysqli抛出异常并使用事务。
事务将确保所有操作要么全部完成,要么没有任何影响。使用事务的另一个重要优点是,它使多个插入更快,消除了单独执行查询可能导致的所有延迟。
要使用mysqli事务,您需要执行以下操作:
首先,确保您有一个正确的mysqli连接,它告诉mysqli在出错时抛出一个异常。然后只需准备查询、启动事务、执行查询并提交事务—就像在接受的答案中显示的一样,但使用mysqli:
由于存在异常和事务,因此无需手动验证每个查询的结果。