2013-10-16 74 views
3

我一直在尋找一些這方面的教程,我似乎運氣不好。基本上,我有一個數據庫,其中包含一個獲勝者的用戶ID(對應於獲勝者用戶ID)和一個失敗者的ID。我正在嘗試創建一個成員配置文件,用於計算成員贏得的所有行。這是我想出的:將所有等於ID的行相加

$web = mysqli_query("select SUM(matches) WHERE WinnerUID='".$req_user_info['id']."'"); 
$web_sum=mysqli_fetch_assoc($web); 
echo $web_sum; 

不幸的是,它不顯示任何數字。誰能幫忙?

+0

的print_r($ web_sum) – Strawberry

+0

其中這些匹配是從任何表? –

+0

您正在向代碼中注入SQL。神奇地將'mysql_'改爲'mysqli_'並不能解決這個問題。使用預準備語句和綁定變量。 – h2ooooooo

回答

3

我認爲你正在尋找COUNT()而不是SUM()。而且你沒有包含表名。另請注意,mysqli_fetch_assoc()將該行作爲數組返回,但不返回第一列的值。另外,mysqli_query()需要連接作爲第一個參數。

$web = mysqli_query($conn, "select COUNT(*) as total FROM matches WHERE WinnerUID='".(int)$req_user_info['id']."'"); 

$row = mysqli_fetch_assoc($web); 
echo $row['total']; 

不要將變量連接到SQL中。使用具有綁定參數的Prepared Statement。在上面的代碼中我輸入了您的ID作爲(int),這是一個快速修復,但您應該切換到準備好的聲明。

預處理語句實例(面向對象接口,而不是程序):

if ($stmt = $conn->prepare("select COUNT(*) from matches WHERE WinnerUID = ?")) { 

    $stmt->bind_param("i", $req_user_info['id']); 
    $stmt->execute(); 
    $stmt->bind_result($web_sum); 
    $stmt->fetch(); 

    echo $web_sum; 

    $stmt->close(); 
} 
+0

真棒幫助。我甚至不知道COUNT()存在,但感謝您的幫助。 – Jacob

+0

沒問題。還添加了一個準備好的語句示例'COUNT()'用於計數多行,而'SUM()'從多行中累加一個字段。所以'SUM()'對於加總所有具有'price'字段的產品的總價格是很有用的。 – MrCode

相關問題