2017-03-18 93 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