fetch_assoc()问题与查询

时间:2011-03-02 14:17:49

标签: php mysql resources

我有这个功能:

    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 个答案:

答案 0 :(得分:2)

您要多次重写$ result变量。
你必须重命名它 如果一个变量将在脚本中进一步使用(比如$ result one),则不应该重写它 但是,如果它是一次性使用的变量,例如$ query one,则可以保留相同的名称以便于阅读。

答案 1 :(得分:1)

if($result)是正确的方法。

if($result!=false)也是正确的。

if($result!==false)错误。

相关问题