2017-07-28 40 views
5

我使用的是經典的ASP和MySQL(使用PHP不會改變問題的關鍵)。在mysql中只設置一個變量一次

我需要在我的主頁上設置一個變量:

SET block_encryption_mode = 'aes-256-cbc' 

爲其他用戶所使用的服務器,我不能將其設置爲全局變量,可以使用默認的block_encryption_mode

我知道我可以在每個網頁的開始處使用ASP/PHP語句,但似乎使用了太多的資源;每個用戶都會在每個頁面上執行SET語句...

有沒有一種方法可以在每個會話的開始時設置變量或執行一些其他SQL語句,就像ASP這樣的onstart事件,也許呢?或者我怎樣才能實現我的目標,而不是每個用戶在我擁有的每個頁面上執行查詢?

回答

2

在每個頁面上調用SET是安全的,因爲它以毫秒級的順序執行。在已經打開的連接上幾乎沒有開銷SET

除非你可以全局應用這個設置,否則我不打擾。在獲取數據庫連接句柄之後,請直接設置block_encryption_mode(連同collationtimezone)。

+1

但是這個字符串就執行每個客戶端上,也從不想這一套是存在其他網站... – Jerry2

+0

因爲我知道block_encryption_mode是一個會話變量,所以使用SET不應該影響其他客戶端。另外,我認爲你需要管理員權限才能比自己的會話設置更多的值。 –

3

您可以使用init_connect變量。

服務器爲每個連接的客戶端執行的字符串。該字符串由一個或多個SQL語句組成,用分號字符分隔。

您也可以使用代碼區分用戶是這樣的:

IF (CURRENT_USER() = '[email protected]') THEN 
    SET SESSION block_encryption_mode = 'aes-256-cbc'; 
END IF;