fetch_assoc () проблема с запросом - PullRequest
0 голосов
/ 02 марта 2011

У меня есть эта функция:

    function myFunc()
{   
    $conn=new mysqli('localhost','root','','myDb');
    $conn->query('BEGIN');
    $query="SELECT events_participants.userid,(SELECT COUNT(*) FROM events_participants WHERE events_participants.eventid=events.id FOR UPDATE) AS totRep FROM events INNER JOIN events_participants ON events_participants.eventid=events.id WHERE events.isConfirmed=3 AND reputationsUpdated=0";
    $result=$conn->query($query);
    if($result!==FALSE)
    {
        while(($row=$result->fetch_assoc())!==NULL)
        {

            $query="UPDATE users SET reputation=reputation+".$row['totRep'].",presences=presences+1 WHERE id=".$row['userid'];
            $result=$conn->query($query);
            if($result==FALSE)
            {
                $conn->query('ROLLBACK');
                throw new DatabaseErrorException();
            }
        }
        $query="UPDATE events SET reputationsUpdated=1 WHERE isConfirmed=3 AND reputationsUpdated=0";
        $result=$conn->query($query);
        if($result!==false)
        $conn->query('COMMIT');

        else
        $conn->query('ROLLBACK');
        throw new DatabaseErrorException();
    }
    else
    {
        throw new DatabaseErrorException();
    }   
}
myFunc();

Если я проверю это, он скажет мне: вызов функции-члена fetch_assoc () для необъекта ... на строке, где находится цикл while.

Но метод fetch_assoc там фактически заполнил мой массив $ row (я тестировал вывод $ row ['totRep'] .., поэтому проблема не в запросе ..

, даже если япроверить тот же запрос в phpmyadmin, он на самом деле возвращает две строки ..

где ошибка?

что мне не хватает ??

еще раз спасибо, ребята!

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

Вы переписываете свою переменную $ result много раз.
Вы должны переименовать его.
Если в сценарии будет использоваться переменная (например, $ result one), ее не следует переписывать.
Однако, если это одноразовая переменная, например, $ query one, то для удобства чтения можно сохранить то же имя.

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

if($result) правильный путь.

if($result!=false) также правильный.

if($result!==false) НЕПРАВИЛЬНО.

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