我有一個cli php腳本,只要電子郵件到達特定地址就執行。如果PHP腳本想要從鎖定的表中讀取,它會等待嗎?
當新電子郵件到達時,會執行腳本的新實例,但是由於它們讀取/寫入相同的數據庫表,有時會寫入錯誤的數據。
我的問題是,如果第一個腳本對所需的所有表進行了鎖定,並且運行了腳本的第二個/第三個等實例,它們是否會等待表被第一個執行的腳本解鎖?如果是這樣,需要多久?
最後我想要做的是讓腳本以串行方式一個接一個地讀/寫,以避免重複和錯誤。
我有一個cli php腳本,只要電子郵件到達特定地址就執行。如果PHP腳本想要從鎖定的表中讀取,它會等待嗎?
當新電子郵件到達時,會執行腳本的新實例,但是由於它們讀取/寫入相同的數據庫表,有時會寫入錯誤的數據。
我的問題是,如果第一個腳本對所需的所有表進行了鎖定,並且運行了腳本的第二個/第三個等實例,它們是否會等待表被第一個執行的腳本解鎖?如果是這樣,需要多久?
最後我想要做的是讓腳本以串行方式一個接一個地讀/寫,以避免重複和錯誤。
是的,它會等待。這是由數據庫服務器完成的,客戶端應用程序完全不知道它正在發生 - 據它所知,數據庫執行查詢的速度很慢。
PHP腳本使用一個mysql庫(mysql,mysqli,pdo),就像任何mysql客戶端連接到mysql服務器並執行查詢一樣。 MySQL服務器可以佔用所有需要的時間。
但是PHP可以設置爲有一個總的腳本執行時間(包括任何mysql查詢)是有限的。如果超出此限制,PHP將終止正在運行的進程。默認情況下,最長執行時間爲30秒,如果我沒有錯,最多執行時間爲300秒。你可以在php.ini中設置它。您甚至可以將CLI最大執行時間設置爲無限制。
數據庫查詢不包括在執行時間內,並執行windows操作系統。請參閱手冊頁面上的註釋:http://php.net/manual/en/function.set-time-limit.php – Nanne
你需要提供具體的例子,以及你的數據庫是如何實現的,以及如何寫入數據庫以及如何。也請「定義錯誤的數據」。 – Sharky