2012-08-13 36 views
0

有沒有辦法確保下面的代碼,一次執行(所以如果訪問者在鍵盤上按下轉義鍵或關閉瀏覽器,它不會只執行一半。重要的是他們都是一次完成或者沒有完成完全)。確保一次性執行PHP/MySQL代碼?

mysql_query($queryone); 

mysql_query($querytwo); 

unlink($file); 

unlink($thumb); 

mysql_query($querythree); 

欣賞所有回覆,示例代碼會很好。

+0

執行需要一段時間嗎? – 2012-08-13 21:21:51

+0

@PeteHerbertPenito不是很快(但是說......即時測試本地......我沒有太多數據)。 – user962026 2012-08-13 21:24:26

+2

你可能想閱讀[* transactions *](http://dev.mysql.com/doc/refman/5.0/en/commit.html)。此外,請不要使用'mysql_ *'函數 - 它已被棄用且不安全!更好地使用MySQLi或PDO。 – alfasin 2012-08-13 21:24:54

回答

1

如果用戶停止瀏覽器,那麼所有這些語句都會執行,但要確保它們能夠執行,請在這些語句之前添加ignore_user_abort(true);,以告訴PHP在檢測到客戶端斷開連接時不會終止。

查看php.ini設置ignore_user_abort。這將允許腳本運行完成,無論客戶端是否仍處於連接狀態。

延伸閱讀:

http://www.php.net/manual/en/features.connection-handling.php

+2

加上在事務中運行查詢,但如果PHP失敗,回滾數據庫,但仍然完成PHP的東西partiall可能是壞的。 – 2012-08-13 21:25:07

+0

這真的只適用於命令行使用。 – 2012-08-13 21:25:42

+1

@MikeBrant它也適用於瀏覽器連接。請參閱文檔。 – drew010 2012-08-13 21:26:31

1

您可能需要MySQL的交易。這些函數(提交,回滾等)將在不是所有查詢都成功時撤銷對brakedown的查詢。 Mysql transactions

1

所以如果訪問者按Escape鍵鍵盤上或關閉瀏覽器,它不會只執行了一半

訪客關閉瀏覽器或按下Esc鍵(或與此有關的任何鍵)將不會影響在您的服務器上運行的腳本。無論客戶做什麼,您的腳本都會完成運行。

其重要他們是一氣呵成或沒有全部完成所有

你一定要看看MySQL Transactions。您可能還想考慮將交易置於stored procedure之內。