我运行一个一直运行良好的vBulletin插件,直到最近我将Apache和PHP从5.4升级到5.5并且突然计算不能按照它应该的方式运行:
$RUser = $row2['reputation'];
$RUserMinus = $RUser-1;
而不是$ RuserMinus是$ Ruser -1的结果,而是用-1替换值,所以$ RUserMinus =" -1"而不是结果。
全文
$query2 = $db->query_read("SELECT reputation FROM user WHERE userid =" . $vbulletin->userinfo['userid']) or die(mysql_error());
while($row2 = mysql_fetch_array( $query2 )) {
$RUser = $row2['reputation'];
}
$RUserMinus = $RUser-1;
$vbulletin->db->query_write("UPDATE user SET reputation=".$RUserMinus." WHERE userid=".$vbulletin->userinfo['userid']) or die (mysql_error());
}
答案 0 :(得分:0)
我认为你使用的是db对象错误,你不应该将mysql函数与db对象混合使用。
如果您只想要一行,请使用query_first。
检查错误,在db。上使用error方法。
为防止出现这些问题,您应该处理数据库没有返回任何行的情况。
$row2 = $db->query_first("SELECT reputation FROM user WHERE userid =" . $vbulletin->userinfo['userid']) or die($db->error());
if(!$row2){
die("User not found!");
}else{
$RUserMinus = $RUser-1;
$vbulletin->db->query_write("UPDATE user SET reputation=".$RUserMinus." WHERE userid=".$vbulletin->userinfo['userid']) or die ($db->error());
}
我同意这些评论 - 问题出在其他地方,您应该验证$row2
包含您期望的数据
你会得到这个结果
$row2
不是数组$row2
它没有包含密钥'reputation'
$row2['reputation']
为0
,null
,false
或非数字类型。 我建议您运行var_dump($row2);
我还建议您设置错误报告以显示警告和通知,因为您会看到一些有用的消息来警告您这些问题:
ini_set('display_errors', 1);
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
更好的是我会查看xdebug,以便您可以像专业人士一样开始调试 - 请参阅this tutorial
答案 1 :(得分:-1)
最后通过改变一些事情来排序。我发布这个给其他遇到这个并且需要答案的人:
if(in_array($foruminfo['forumid'], $forums) && $vbulletin->userinfo['userid'] !== $threadinfo['postuserid'] && !is_member_of($vbulletin->userinfo, 14)){
// Update Original Poster Rep to reflect the + 1 change
$vbulletin->db->query_write("UPDATE user SET reputation = reputation + 1 WHERE userid = " . $threadinfo['postuserid']) or die (mysql_error());
// Update Replying Users Rep to reflect the -1 change
$vbulletin->db->query_write("UPDATE user SET reputation = reputation - 1 WHERE userid = " . $vbulletin->userinfo['userid']) or die (mysql_error());
}