我正在使用PHP Web應用程序連接到MySQL,我想要做的是設置已登錄的客戶端的用戶標識,然後在視圖和函數中使用該變量來限制數據回。MySQL變量PHP連接
目前,我簡單地使用: -
SET @UserID = 3;
然後內的意見/函數引用此。
這是跨越多個併發用戶會話做到這一點的合適可靠方法嗎?這是否會在該用戶的一生中出現MySQL的PHP連接(或頁面加載),我顯然希望確保沒有其他連接可以利用它。它設置在每個頁面加載(或從我的應用程序重新連接MySQL)。
謝謝大家!
我正在使用PHP Web應用程序連接到MySQL,我想要做的是設置已登錄的客戶端的用戶標識,然後在視圖和函數中使用該變量來限制數據回。MySQL變量PHP連接
目前,我簡單地使用: -
SET @UserID = 3;
然後內的意見/函數引用此。
這是跨越多個併發用戶會話做到這一點的合適可靠方法嗎?這是否會在該用戶的一生中出現MySQL的PHP連接(或頁面加載),我顯然希望確保沒有其他連接可以利用它。它設置在每個頁面加載(或從我的應用程序重新連接MySQL)。
謝謝大家!
因爲它清楚地在MySQL變量手冊頁第一款規定:http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
用戶定義的變量是會話特有的。也就是說,由一個客戶端定義的用戶變量不能被其他客戶端看到或使用。當客戶端退出時,給定客戶端會話的所有變量都會自動釋放。
例如,它們在php連接處於活動狀態時保持連接狀態,並且在連接關閉/終止時自動刪除。除非你在PHP中使用持久連接(你不應該這樣做),否則mysql變量基本上會存在於特定腳本調用的生命週期中,並且當相同的用戶稍後返回另一個http請求時將不可用。
所以,嚴格來說,你在做什麼不應該是一個問題(每個PHP連接存在或多或少獨立)。但是,那就是說,這不是最好的方法。
我認爲你有一個「如果你只有一把錘子,一切看起來像釘子」問題。 MySQL並沒有考慮到請求生命週期的設計,也不需要知道它。另一方面,PHP的設計正是這個想法。
相反的:
mysqli_query('Set @UserID=' . $id);
$output = mysqli_query('SELECT * FROM FOO WHERE [email protected]');
爲什麼不直接使用bound variables?
看起來像你只是錯過了這個問題 –
我認爲值得重申的是,這種事情是一個非常糟糕的想法,這就是爲什麼應該爲每個查詢專門指定綁定,而不是依賴連接上下文爲您提供它們。 – tadman
是從連接池中不同的持久連接? – tadman
持久連接在未使用時保留在池中。通常他們在網絡環境中是一個壞主意。例如一些腳本欄通過一個複雜的事務中途。由於連接的持久性,mysql + php將其打開。一些OTHER腳本然後顯示,重新使用連接,並開始做自己的東西。您可以很容易地陷入僵局,因爲腳本#2不知道它正在腳本#1的半完成事務中工作。如果連接在#1中止時關閉,則交易會自動回滾。 –
持續連接是好的,死鎖情況不是問題。 –