即使在PHP脚本停止插入数据之后,数据也会被插入到DB中


Data is being inserted into DB even after the PHP script inserting data is stopped

这是我经常经历的事情。我正在运行一个PHP脚本,将数据插入PostGreSql数据库。现在,有时,如果我在中间停止这个脚本执行,不知何故,数据仍然会不断添加到数据库中。

为什么会发生这种情况,我该如何规避这个问题?

请注意,只需在浏览器中按"停止"并不能真正停止PHP脚本(无论如何,在大多数服务器上都不会),它只会断开浏览器与进一步输出的连接。脚本将一直在服务器上运行,直到它完成或超时。

重新启动服务器会关闭在那里运行的任何脚本,但这就像试图用大炮杀死一只苍蝇。

在最简单的情况下,您可能需要不时检查!connection_aborted()。看见http://php.net/manual/en/features.connection-handling.php

我想你的脚本不知怎么失败了?如果是,则应该使用事务。您在PHP脚本的最开始就开始了一个事务,并在最后提交它。如果脚本失败,事务将永远不会被提交,因此将被回滚。这样,如果脚本失败,数据将不会添加到数据库中。

它将或多或少地沿着以下路线工作:

<?php
pg_query("BEGIN;");
// all of your PHP and pg code
// end of file    
pg_query("COMMIT;"); 
?>

您也可以手动调用pg_query("ROLLBACK;");取消您的事务并回滚。

此外,您的脚本sholud从未以这种方式失败:)