2017-03-18 78 views
-3

我运行一个vBulletin插件,一直工作得很好,直到最近我升级了Apache和PHP从5.4到5.5,suddonly计算心不是工作的方式,它应该做的:

$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()); 
} 
+1

'的var_dump($ R用户);'或'的var_dump($ 2行[ '声誉');'说明了什么? –

+1

尝试打印'$ row2 ['reputation']'这可能是'0' –

+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());  
} 
0

我认为你正在使用的数据库对象错了,你不应该混合与db对象MySQL的功能。

如果您只想要一行,请使用query_first。

检查错误,使用数据库的错误方法。

为防止发生这些问题,您应该处理数据库不返回任何行的情况。

$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

+0

不幸的是,它仍然导致只有-1而不是值-1 – AYCE

+0

你是否遵循了调试建议?你的var转储输出是什么?你添加了error_reporting代码吗?它显示任何消息? – Theo