2011-10-04 43 views
1

在一個配置文件,它包含腳本的每一頁上,我有以下的代碼來獲取用戶首選的語言文件:每次頁面加載時,這些mysql查詢是否都運行?

if ($_SESSION['id']) { // if logged in 

    $language = mysql_result(mysql_query("SELECT default_lang FROM employees WHERE id = '$_SESSION[id]'"), 0); 

    include "languages/".$language.".php"; 

} else { // If not logged in, use system default language 

    $language = mysql_result(mysql_query("SELECT config_value FROM system_config WHERE config_name = 'language'"), 0); 

    include "languages/".$language.".php"; 
} 

我的問題是,這是否查詢得到執行每一次訪問者刷新一個新頁面?在給定頁面上查看mysql查詢總數的最簡單方法是什麼 - 我經常在論壇中看到這一點,例如:在XX秒內執行20個查詢。

+0

爲什麼不在你的腳本中放置一個計數器變量並在每次執行查詢後增加它? –

+0

你有一個SQL注入錯誤,學習使用PDO或'mysql_real_escape_string()',參見:http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain – Johan

回答

0

通常,減少查詢量是個好主意,但我寧願儘早保持代碼清潔。緩存會引入各種問題,除非你真的需要它,因爲查詢速度很慢,這會浪費時間,增加代碼的複雜性。

影響單個表格並返回單個值的簡單查詢非常快。很可能,您嘗試緩存價值並不會帶來顯着的收益。

要了解性能,您應該開始使用分析器。它會告訴你什麼需要花時間在你的腳本中,而且可能不會是你期望的。

對於開發環境,我喜歡XDebug和KCacheGrind。這裏是一個簡介教程:http://devzone.zend.com/article/2899

0

是的兩個查詢中的一個將運行每頁加載。

如果你不想要這個,你也可以在你的SESSION中放置default_lang變量。

1

是,一個或另一個將運行時間 - 這是一個有點愚蠢,因爲你已經做了一些每個用戶的I/O獲取會話 - 你可以只....

$language=$_SESSION['lang']; 
if (!$language) { 
    if ($_SESSION['id']) { 
     $language = mysql_result(mysql_query("SELECT default_lang FROM employees WHERE id = '$_SESSION[id]'"), 0); 
    } else { 
     $language = mysql_result(mysql_query("SELECT config_value FROM system_config WHERE config_name = 'language'"), 0); 
    } 
    $_SESSION['lang']=$language; 
} 
include "languages/".$language.".php"; 

甚至只是用「接受語言」的要求(假設你已經使用標準命名,並有所有語言)....

list($language)=explode(';', $_SERVER['Accept-Language']); 
include "languages/".$language.".php"; 

(NB上面的代碼使用請求標題需要清理一下,以避免本地文件包含隱藏)

0

是的,它會在每次頁面重新加載時執行。然而,從技術上講,它是第二次從緩存中獲取或者已經具有查詢計劃的速度更快。 請有人確認我是否錯了?

相關問題