这是我经常遇到的事情。我正在运行PHP脚本以将数据插入PostGreSql数据库。现在有时候,如果我在中间停止执行这个脚本,那么数据仍会不断添加到数据库中。
为什么会发生这种情况?如何规避这个问题?
答案 0 :(得分:1)
请注意,只是在浏览器中按“停止”并不会实际停止PHP脚本(无论如何不在大多数服务器上),它只会断开浏览器与其他输出的连接。该脚本将继续在服务器上运行,直到它完成或超时。
重新启动服务器将关闭在那里运行的任何脚本,但这就像试图用大炮杀死一只苍蝇。
在最简单的情况下,您可能希望偶尔检查!connection_aborted()
。见http://php.net/manual/en/features.connection-handling.php
答案 1 :(得分:0)
我认为你的剧本以某种方式失败了?如果是这样,您应该使用交易。您在PHP脚本的最开始处启动事务并在最后提交它。如果脚本失败,则永远不会提交事务,因此将回滚。这样,如果您的脚本失败,您的数据将不会添加到数据库中。
它或多或少会沿着这些方向发挥作用:
<?php
pg_query("BEGIN;");
// all of your PHP and pg code
// end of file
pg_query("COMMIT;");
?>
您也可以手动调用pg_query(“ROLLBACK;”);取消您的交易和回滚。
此外,你的脚本sholud永远不会失败:)