PHP处理了MYSQL进程问题

时间:2013-10-01 19:20:23

标签: php mysql sql

我有一个创建发票的过程,用适当的数据创建5个表和填充,然后从那些5构建第6个最终表。这是大约14个查询,我正在考虑使用PHP来处理它们由于某些日期变量需要改变。

如果我将所有14个按顺序排列并运行它,它可以完美地运行。你想在php中的一个语句中使用整个序列吗?示例如下:

$TheWholeShow = whole sql sequence
$date=$_POST["date"]
mysqli_query($connect,$TheWholeShow)

或者你想要分手吗?

$part1 = build table x
$part2 = build table y
$part... the rest
$date=$_POST["date"]
mysqli_query($connect,$part1,$part2,$part3,$part4..and so on)

我觉得在不打字的情况下这是一个很难回答的问题。另外,我是一名新编码员,并且不确定这种做法的正确做法。

我被告知bash脚本可能是更好的选择吗?

1 个答案:

答案 0 :(得分:2)

这确实是一个棘手的问题。

首先,在Web请求的上下文中执行长时间运行的进程通常是个坏主意。大多数服务器对脚本施加超时 - 它是配置值,并且您的里程会有所不同。随着数据的增长,您最终可能会遇到超时,并且您的流程将失败。

其次,您需要确保一次只能运行一个PHP脚本实例 - 特别是如果它是一个长时间运行的脚本。没有明显的方法可以做到我所知道的“开箱即用”,所以你可能需要构建一个自定义机制来只允许单个实例运行;这可能比听起来更难。

关于你的问题,正如TheWolf所写,考虑在此使用事务 - 并非所有MySQL安装都允许这样做。使用事务意味着整个数据库显示成功或失败作为一个单元 - 所以没有“我们到目前为止,然后它被禁止,现在我们有一些数据,但没有其他位,我们必须编写自定义清理脚本“疯狂。

由于司机不允许您一次执行多个语句,因此您必须将其拆分 - 但不是您建议的那样。

$date=$_POST["date"]
mysqli_begin_transaction($connect)

$part1 = build table x
mysqli_query($connect,$part1)

$part2 = build table y
mysqli_query($connect,$part2)
$part... the rest
mysqli_query($connect,$part...)

mysqli_commit($connection)

您必须构建自己的回滚逻辑 - 这主要取决于应用程序逻辑,以及您希望如何处理脚本中的失败 - manual还有一些进一步的解释。