$ var = $ var - 1 PHP问题

时间:2017-03-18 13:19:29

标签: php

我运行一个一直运行良好的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()); 
}

2 个答案:

答案 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']0nullfalse或非数字类型。

我建议您运行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());     
}