php
  • mysql
  • 2011-10-04 5 views 1 likes 
    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クエリの総数を確認する最も簡単な方法は何ですか?私はフォーラムなどでこれをよく見ています。すなわち、20回のクエリがXX秒で実行されます。

    +0

    クエリ変数をスクリプトに入れて、クエリを実行するたびにその変数をインクリメントするのはなぜですか? –

    +0

    SQLインジェクションエラーが発生しました.PDOまたは 'mysql_real_escape_string()'の使用方法を学んでください。http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain – Johan

    答えて

    0

    一般的には、クエリの量を減らすことをお勧めしますが、早い段階でコードをきれいに保ちます。キャッシュにはあらゆる種類の問題が導入され、クエリが遅いために本当に必要な場合を除き、コードの複雑さが増します。

    単一のテーブルに影響を与え、単一の値を返す単純なクエリは非常に高速です。その値をキャッシュに入れようとしても、大きなメリットはありません。

    パフォーマンスについては、プロファイラの使用を開始する必要があります。それはあなたのスクリプトで何時間を要するかを示し、おそらくあなたが期待するものではありません。

    開発環境では、私はKCacheGrindでXDebugが好きです。はじめにチュートリアルを紹介します:http://devzone.zend.com/article/2899

    0

    はい2つのクエリのいずれかがページの読み込みごとに実行されます。

    これを望まない場合は、default_lang変数をSESSIONに入れることもできます。

    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

    はい、ページがリロードされるたびに実行されます。ただし、技術的には、2回目はキャッシュから取得するか、すでにクエリプランがあるため、高速です。 私が間違っていれば誰でも確認してください。

     関連する問題

    • 関連する問題はありません^_^