iT邦幫忙

0

php mysql暫存表可以 post 嗎?

  • 分享至 

  • xImage

php 查資料後, show 在畫面上, 有加一個excel按鈕匯出excel.
有試過creat table 檔名yyyymmddhhmmss, post 檔名, 另一支php程式可以讀取, 但table會一直存在. 可以在php下drop table 指令. 但若使用者不當退出, 就無法drop table.
請問還有其他的方式嗎?
也有試creat temptable table, 但php post, 另一支php就無法讀取 temptable資料

greenriver iT邦研究生 4 級 ‧ 2024-01-30 08:25:33 檢舉
如果已經有php查詢過的資料,那可以考慮用JS建立excel並匯出,就不用再POST到後端了。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
dashuai
iT邦新手 5 級 ‧ 2024-01-29 14:51:52

在PHP中,MySQL的臨時表(temptable)是在伺服器端為當前資料庫會話創建的,並且僅對創建它的會話可見。 這意味著當你在一個PHP腳本中創建了一個臨時表後,試圖通過POST請求傳遞這個臨時表的資訊給另一個PHP腳本,新的PHP腳本無法直接訪問之前會話創建的臨時表。
針對您的場景,您可以考慮以下替代方案:
Session存儲:
不使用MySQL臨時表,而是將查詢結果暫存在PHP的$_ SESSION變數中。 然後在用戶點擊“匯出Excel”按鈕時,從session中讀取數據並生成Excel檔案。 這樣即使用戶不正常退出,由於session生命週期與用戶的瀏覽器會話相關聯,在用戶關閉瀏覽器或者會話過期時,這些數據也會自動清除。
檔案系統暫存檔案:
將查詢結果寫入服務器上的暫存檔案,檔名可以是唯一識別字如時間戳記,然後通過POST將檔名傳遞給處理Excel匯出的PHP腳本。 在完成匯出操作後,立即删除此暫存檔案以確保資源釋放。
資料庫中間錶:
如果需要持久化數據以便稍後匯出,並且擔心臨時表會被清理,可以創建一個中間錶而非臨時表,但是加上唯一標識用戶或會話的識別字作為額外欄位。 在用戶完成匯出或者一定時間後,通過定時任務或其他機制清理這些中間錶的數據。
一次性匯出流程:
用戶點擊“匯出Excel”時,在同一個PHP腳本中完成資料查詢和Excel檔案生成,直接下載到用戶本地,這樣不需要跨多個PHP腳本或HTTP請求,避免了共亯臨時數據的問題。
結合您的嘗試,對於臨時表,確實它會在連接關閉時自動删除,囙此不適合跨多個HTTP請求來傳遞數據。 您應該選擇一種能够在請求之間保持狀態的管道,而不會依賴於資料庫的臨時表特性。

0

基本而言。
如果是固定化的資料。並不會再建立成 table 來取得處理。

常用的方式是緩存資料的方式。
怎麼緩存就看你打算用什麼方式去做緩存。

如果說生出來的資料,確實還有機會後置條件處理。(一般並不會這樣設計)
那就用一個假性暫存表處理。
何謂假性暫存表。

也就是並不是使用 creat temptable table 的方式。還是確實用 creat table。
但表名可以將其命名為 temp_表名_日期時間

並另外建立一張表去記錄「暫存表名、生成者ID、生成時間」

這樣你程式上,就可以利用生成的時機。順便去依時間去做刪除。
(假設暫存表只保留1小時,就依生成時間+1小時的判斷來做刪除推定即可)
這樣就算之前沒刪除。下一次動作還是會被刪除。
並不一定要做在另一個控制處理DROP。

當然,一開頭我就說了。很少人會用這樣的設計。畢竟DROP的動作是很危險的事。
所以一般都是拿完需要的資料,就會緩存下來。供其它方面使用。
且緩存一定得要設定有效期。

我要發表回答

立即登入回答