2016-07-22 123 views
1

我在一個php文件中創建了一個臨時表,並且想要在另一個php文件中訪問它。腳本順序運行。我使用了mysqli,並在主機名前加上p:。持久連接不會持續在兩個php腳本之間

問題是在我的第二個php文件中,我不能訪問我的臨時表。所以我想知道它是否可能做到這一點,或不是?如果是的話,怎麼樣?我正在使用WAMP服務器。

+1

向我們展示您的嘗試。 **提醒**:我們不在這裏爲您創建代碼。 – Nytrix

+1

根據您的要求來判斷,您需要的不是臨時表格,而是真實的實際表格。在這種情況下,您的問題就會消失,因爲這兩個腳本都可以訪問相同的數據源。 – Mjh

+0

@Mjh,我想使用臨時表,因爲當在第二個腳本中,我從它讀取數據,並在它之後。我認爲就性能而言,創建臨時表可能會更好,但我可能是錯的。 –

回答

0

不可能,直接。臨時表在用於建立連接的連接關閉時被銷燬。當您的「創建」腳本關閉時,其數據庫連接將關閉,並且mysql將清除 - 包括銷燬該臨時表。

這意味着當你的「使用」腳本啓動時,它會得到一個新的連接,沒有第一個腳本所做的任何事情。

PHP中存在持久連接,但這些連接存在於池中,並且沒有控制任何特定腳本從該池中獲取的WHICH連接。您可能會很幸運,並獲得兩個不同腳本的相同連接,但這完全是偶然的。

你需要一些OTHER第三腳本持續運行以保持打開mysql連接,並保留臨時表。而你的其他兩個腳本將與第三個腳本進行通信。

+1

在'WAMP'的情況下,你寫的可能是真的,但我做了一個測試。爲了測試的目的,我使用帶有'pm.start_servers = 2'和'pm.max_requests = 0'的'php-fpm',以便進程不會退出。我通過創建持久性PDO連接來連接到MySQL。在MySQL的終端中,我通過發佈'SHOW PROCESSLIST \ G;'來驗證已建立的連接,該連接顯示1個連接的id爲6.我「敲擊」我的php端點,它執行選擇查詢。在500個http請求之後,發出'SHOW PROCESSLIST \ G;'顯示同一個活動連接。 – Mjh

+0

如果你只有一個網站用戶,並且從不在網站上有2個以上的並行請求,那麼你可能只有1個pcon在池中。但只要您獲得並行運行的2+腳本,他們就會建立兩個連接,現在所有投注都關閉。 –

+1

使用非持久連接併發出'SHOW PROCESSLIST \ G;'顯示不同的連接過程。鑑於我可能是錯的事實,我想看看別人怎麼看待這個問題,因爲我知道做簡單的測試絕對會導致錯誤:) – Mjh

0

http://php.net/manual/en/mysqli.persistconns.php

mysqli擴展的持久連接但是提供了內置的清理處理代碼。通過mysqli的進行清理,包括:

(值得一讀其他的東西太多,但最重要的一點是)

  • 關閉和刪除臨時表

總之,臨時表就是這樣,暫時的。它並不意味着被用於其他目的,而不是暫時存儲某個特定操作的某些數據。如果你想要一個更持久的東西,可以考慮使用具有內存存儲引擎的具體表格。

+0

是的,我已經讀過,但仍認爲這是可能的。具有內存存儲引擎的具體表格是什麼意思 –

+0

http://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html – apokryfos