将mysql查询的结果对象转换为函数的问题

I have a function to process info from a database. This is called multiple times in a page. And I don't want to query the database every time. So I put the query outside. If I do that, the function doesn't work. I know this can be done because, there was a similar question somewhere in SO. But that addressed a different situation. I don't know what is wrong here. Any help will be greatly appreciated.

If I put all this code into a separate test file including the conn file and query, it works. But in my main page, where I have the functions.php included first, then conn.php and then the query and then the display code called by js fadein event, the $result refuses to work inside the function

EDIT : This code has been cleaned up as per comments received (globals replaced with variables passed to the function and variable names rationalised)

function total($item,$result,$val){
    global $totRate;
    while($getRates=$result->fetch_assoc()){    
    $gotItem= strtolower(preg_replace('/[^(\x20-\x7F)]*/',"",$getRates['item']));
    $gotItem=str_replace(array("_"," ","/"),"",$gotItem);

    if($item==$gotItem){
          $rate= $getRates['rate'];
          $totRate=$val*$rate;
        return $totRate;
        }
    }
}

The Result Call PHP file

$query = "SELECT * FROM rates ORDER BY item";
$result = $orderdb->query($query)

if (isset($_POST[$itemname]) && !empty($_POST[$itemname])) {
    $val=$_POST[$itemname];
    total($itemname);
    echo $totprate;
} else {
    echo "0";
}

I am writing this with the assumption that your SQL is working but are having problems displaying what you want - this may help. The code below saves your $result variable from your query and then passes it into the total function as a second parameter. Previously you were returning $totprate from total but you were not saving it anywhere - it is now saved to the $totprate variable.

Note: I cannot see $orderdb anywhere in your code, I'm assuming you have that in your file and that it is working.

function total($item, $result){
    global $val;
    global $pid;
    global $pitem;
    global $prate;
    global $totprate;
    global $gotitem;
    global $getratess;
    // global variable for $result removed so it doesn't overwrite variable passed to function

    while($getratess=$result->fetch_assoc()){
        $gotitem= strtolower(preg_replace('/[^(\x20-\x7F)]*/',"",$getratess['item']));
        $gotitem=str_replace(array("_"," ","/"),"",$gotitem);

        if ($item==$gotitem) {
            $pid=$getratess['id'];
            $pitem= $getratess['item'];
            $prate= $getratess['rate'];
            $totprate=$val*$prate;
            return $totprate;
        }
    }
}

$query = "SELECT * FROM rates ORDER BY item";
$result = $orderdb->query($query);

if (isset($_POST[$itemname]) && !empty($_POST[$itemname])) {
    $val=$_POST[$itemname];
    $totprate = total($val, $result); // pass itemname as first parameter and result array as second parameter and save it to the $totprate variable
    echo $totprate;
} else {
    echo "0";
}

Let me know if this helps.