2017-08-16 17 views
-1

我很難在PHP中創建預留時間限制。我做了這方面的研究,但不幸的是我不知道這是什麼確切的術語。自動更改數據庫行項目,如果它在一定的時間內沒有更改

我已經有一個工作預訂模塊,如果未經客戶確認,我需要添加一項功能,在30分鐘內自動取消該預訂。

是否有PHP代碼片段,如果它在30分鐘內沒有更改,它會自動設置一行的值?

PS:對不起英文不好。

+0

使用cron來更新記錄 – urfusion

+0

任何理由downvote?無論如何,我會嘗試@urfusion。 –

+0

我沒有投下來夥計。 – urfusion

回答

1

是否有PHP代碼片段,如果在30分鐘內沒有更改它,它會自動設置一行的值?

不。這是以數據爲中心的,大概你的「保留」存儲在數據庫(例如MySQL)中?

PHP作爲平臺在99.9%的情況下響應請求(CLI或HTTP) - 或稱爲「事件驅動」。沒有簡單的方法可以爲將來即將到期的事件創建「事件」,而無需將您的思想移出純PHP以外的領域。

通過使用DBMS的時間戳(例如參見ON UPDATE CURRENT_TIMESTAMP()),您可以在更新「更新時間」字段時使用event driven(您可以從中檢查任何未來事件)記錄是否「過期」(上次更新時間戳+30分鐘)。

如果您需要在到期時生成事件(例如發送電子郵件說的預訂被取消),除非你有某種「延遲執行」(一些排隊平臺的功能 - 範圍之外)您需要periodically poll(與事件驅動相反的「種類」)來查找任何已過期的記錄。

通過PHP在LAMP堆棧上執行此操作的最常見方法是編寫cronjob。這是一個永久運行的服務,它將(每60秒的最大頻率)觸發你的代碼。

如果您正在沿着輪詢路線前進,但只需要操作日期(不發送電子郵件等),則可以使用DBMS調度程序進行調查(例如MySQL events)。儘管如此,警告 - 在數據庫中隱藏業務邏輯並不總是會導致可維護的解決方案。


補充說明:如果你還沒有使用的PHP框架,考慮發現產品的樂趣就像laravel,給你task scheduling開箱。

+0

我看到的功能。我是新來的cron工作,看起來很混亂。我會嘗試使用時間戳。感謝這個主意! –

+0

我會檢查laravel了。 –

+0

我真的強烈建議撿了一個框架。這將抽象了很多混亂的離開你:-)關於'cronjobs' - 所有你需要明白的是你告訴你的服務器來爲某些給定的時間間隔運行的命令(例如'PHP myscript.php')(例如每天,或每週二下午3點)。這就是所有的cron - 一件事,非常好。 – wally

1

我建議另一種方法:

的這2種方法之一: 1)檢查開放預約時,隨時添加檢查WHERE createdat > NOW() - INTERVAL 30 MINUTE。 這樣你只會看到仍然可以證實 注意,30分鐘現在已經很難在查詢編碼保留/查詢

2)當時間可以改變,你也可以考慮增加一個額外的列給你表格:expiresat 當插入你的預訂時,你可以寫下這個時刻,直到預訂過期: INSERT INTO table (all, columns, expiresat) VALUES ('all', 'values', NOW() + INTERVAL 30 MINUTE) 這樣你可以改變每個訂單的分鐘數,或者在晚上給人們更多的時間fi。

確認時,您可以重置此列的值設置爲null 你有修改查詢: WHERE expiresat > NOW() OR expirexat is null

它是在編程方面付出更多的努力,但你不必擔心過程總是要跑到刪除開放預訂

相關問題