php
  • mysql
  • 2014-04-24 29 views -1 likes 
    -1

    我在想,如果使用函數從表中的每個函數被調用將不僅僅是一個普通的MySQL查詢查詢一次少足夠的時間查詢特定行。通過使用函數查詢mysql需要更多時間來加載?

    這裏是我的意思更清晰的圖片。

    function userinfo($table, $row, $data, $where){ 
    global $db; 
    $users_sql = $db->query("SELECT $row FROM $table WHERE $where = '$data'"); 
    $users_row = $db->fetch_assoc($users_sql); 
    return $users_row[$row]; 
    } 
    
    echo userinfo('users', 'firstname', $_SESSION['username'],'username'); 
    echo userinfo('users', 'avatar', $_SESSION['username'],'username'); 
    

    或只是在做這個沒有功能

    $users_sql = $db->query("SELECT $row FROM $table WHERE $where = '$data'"); 
    $users_row = $db->fetch_assoc($users_sql); 
    echo $users_row['firstname']; 
    echo $users_row['avatar']; 
    

    我猜第二種方式會更好,但我得仔細檢查。

    +0

    第一個需要更多時間,因爲它必須訪問數據庫兩次 – gbestard

    +1

    在側面節點上,如果您在多個位置使用該查詢,則_should_將其包裝在一個函數中,方法可以更輕鬆地處理未來的變化。 –

    +0

    這就是爲什麼我正在爲它做功能。因爲我在一堆地方使用它。不過,我仍然可以使用第二個。我只是想知道,如果使用該功能會比使用其他方式更專業? –

    回答

    2

    變化首先:

    function userinfo($table, $row, $data, $where){ 
        global $db; 
        $users_sql = $db->query("SELECT $row FROM $table WHERE $where = '$data'"); 
        $users_row = $db->fetch_assoc($users_sql); 
        return $users_row; 
    } 
    $row = userinfo('users', 'firstname, avatar', $_SESSION['username'],'username'); 
    echo $row['firstname']; 
    echo $row['avatar']; 
    

    將使其更有意義,並避免額外的數據庫查詢;但是你的第二個「沒有函數」等價物根本就不是等價的,因爲你假設$ users_row將返回firstnameavatar,而你的第一個例子不會(除非你使用上面顯示的邏輯)

    更通用的將是

    function userinfo($table, $data, $where){ 
        global $db; 
        $users_sql = $db->query("SELECT * FROM $table WHERE $where = '$data'"); 
        $users_row = $db->fetch_assoc($users_sql); 
        return $users_row; 
    } 
    $row = userinfo('users', $_SESSION['username'],'username'); 
    echo $row['firstname']; 
    echo $row['avatar']; 
    

    但是你的做法,這是不好的;你真的應該使用準備好的語句並綁定變量;並相應地構建您的查詢

    +0

    中,你只是聰明的朋友,謝謝 –

    相關問題