PHP处理MYSQL进程问题
我有一个开票流程,创建5个表并填充适当的数据,然后在这5个表的基础上构建第6个最终表。这是大约14个查询,我正在考虑使用PHP来处理它们,因为一些日期变量需要更改 如果我把所有14个按顺序排列并运行它,它就会完美地工作。您想在php中将整个序列放在一条语句中吗?示例如下:PHP处理MYSQL进程问题,php,mysql,sql,Php,Mysql,Sql,我有一个开票流程,创建5个表并填充适当的数据,然后在这5个表的基础上构建第6个最终表。这是大约14个查询,我正在考虑使用PHP来处理它们,因为一些日期变量需要更改 如果我把所有14个按顺序排列并运行它,它就会完美地工作。您想在php中将整个序列放在一条语句中吗?示例如下: $TheWholeShow = whole sql sequence $date=$_POST["date"] mysqli_query($connect,$TheWholeShow) 还是你想把它拆散 $part1 = b
$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脚本可能是一个更好的选择?这确实是一个棘手的选择 首先,在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)
您必须构建自己的回滚逻辑—这主要取决于应用程序逻辑,以及您希望如何处理脚本中的故障—其中有一些进一步的解释。您必须将其分解。PHP中的底层mysql驱动程序不允许在单个query()调用中执行多个查询代码>和
提交代码>/回滚代码>。通过这种方式,您可以拆分查询(正如@Marc B所述,底层驱动程序不允许多个查询,这是您必须做的),如果您愿意,您可以创建一个存储过程来执行此操作-具体取决于您的MySQL版本。@Marc B,有,但不建议使用此操作@比尔:不管怎么说,只要启动多个连接就行了。mysqli无法改变底层驱动程序中的基本限制