MySQL кэширование из моей собственной функции PHP - PullRequest
1 голос
/ 04 июля 2011

Здравствуйте: у меня есть такая функция

function query($query)
{
    if (in_array($query,$this->queries))
    {
            return $result = $this->results[$query];
    }

    $this->queries[] = $query;
    $result = mysql_query($query);
    if ($result)
    {
            while($row = mysql_fetch_array($result)
            {
                    $this->results[$query][] = $row;
            }

            //I need to return $result for later use (so I can loop it in while if i need to do so later)
            //but problem is that $result is being cleaned up after fetching

    }
}

Кто-нибудь / кто-нибудь знает решение?

Ответы [ 2 ]

1 голос
/ 04 июля 2011

Вы уже получаете массив результатов в функции, поэтому не следует использовать mysql_fetch_assoc.Вместо этого просто просматривайте результаты (при условии, что они есть):

function query($query)
{
    if (in_array($query,$this->queries))
    {
        return $result = $this->results[$query];
    }

    $this->queries[] = $query;
    $result = mysql_query($query);
    if ($result)
    {
        while($row = mysql_fetch_assoc($result)
        {
            $this->results[$query][] = $row;
        }

        return $this->results[$query];
    }
}

И затем используйте:

$result = query("SELECT * FROM test");

if(count($result) > 0)
{
    foreach($result as $key=>$value)
    {
        // Do what you need to with the rows
    }   
}
1 голос
/ 04 июля 2011

Пока вы используете буферный запрос (то есть mysql_query () вместо mysql_unbuffered_query ()), вы можете сбросить внутренний указатель данных набора результатов и использовать его (снова) с mysql_fetch _... ().

см. http://docs.php.net/function.mysql_data_seek

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...