2012-04-22 17 views
1

我有一個論壇系統,我在我的thread.php頁面中使用了很多$users->permissions()。我想知道的是,如果我這樣做$rights = $users->permissions()會只撥打電話做數據庫得到的那個人一次的權利,而不是做這樣的事情:在一個變量中只存儲一個MySQL提取數組嗎?

if($users->permissions() ==1) { show some mod panel } 
elseif($users->permissions == 2) { show some admin panel } 


SELECT `users`.`rights` FROM `users` LEFT JOIN `sessions` ON `sessions`.`user_id` = `users`.`id` WHERE `sessions`.`session_hash` ='".$this->con->real_escape_string($_COOKIE['session_hash'])."' 
+1

如果您不向我們展示'permissions()'的代碼,我們不能說任何話! – ComFreek 2012-04-22 17:59:09

回答

1

你說得對。如果您將調用$users->permissions()的結果存儲到變量(例如$rights)中,然後使用它來檢查,那麼它只會對數據庫執行一次調用(並且加速腳本,因爲它在此時檢查本地數據而不是觸發關閉請求到其他地方的服務器)。

但是,如果您使用您在初始問題中顯示的代碼,那麼每次檢查該值時都會執行對數據庫的調用。

就個人而言,我會用一個switch結構:

$rights=$users->permissions(); 
switch ($rights) 
{ 
    case 1: 
    //Show some form 
    break; 
    case 2: 
    //Show something else 
    break; 
    default: 
    //Do something just in case it's not 1 or 2 
    break; 
} 

如果你想堅持if...else語句,仍$users->permissions()結果存儲到一個變量,那麼無論你說在if結構$users->permissions(),更換它與$rights

1

你是混亂的函數和變量。

與每次調用時運行的函數不同,變量不會運行任何操作。它們只包含一些價值。這就好比把錢放在口袋裏。一旦你從一個店主那裏得到了改變並把它放在口袋裏,錢就會留在口袋裏,每次你把手放進口袋時都不需要店主。

+0

我正在談論的是將從mysql獲取數據的函數的結果存儲到變量中。如果我使用這個變量,它只會提供存儲在變量中的數據或每次使用該變量時,是否必須調用mysql,因爲該變量設置爲該函數? – Steve 2012-04-22 18:10:37

+0

我的答案不夠明確嗎? – 2012-04-22 18:14:12

相關問題