我有这个功能:
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中测试相同的查询,它实际上会返回两行..
错误在哪里?
我错过了什么?
再次感谢你们!
答案 0 :(得分:2)
您要多次重写$ result变量。
你必须重命名它
如果一个变量将在脚本中进一步使用(比如$ result one),则不应该重写它
但是,如果它是一次性使用的变量,例如$ query one,则可以保留相同的名称以便于阅读。
答案 1 :(得分:1)
if($result)
是正确的方法。
if($result!=false)
也是正确的。
if($result!==false)
错误。