2012-11-06 139 views
0

我不明白爲什麼我得到這個警告:「警告:爲foreach()提供的無效參數」。此代碼在本地工作,但是當我推送到服務器時,我收到警告。任何想法爲什麼?PHP - 警告:爲foreach提供的無效參數()

function updateVIfromScores($client_id, $vi__weight_array){ 
    $vi = 0; 
    $sql = "SELECT * FROM client_vulnerability_scores 
     WHERE client_id = $client_id"; 
    $result = mysql_query($sql) or die('query in updateVIfromScores failed:'.mysql_error().'<br/>sql:'.$sql.'<br/>'); 
    foreach(mysql_fetch_array($result, MYSQLI_ASSOC) as $key => $value){ 
     $vi += $vi__weight_array{$key} * $value; 
    } 
    return $vi; 
} 
+1

嘗試'var_dump($ result);'在循環之前查看'$ result'的值是什麼。 –

+0

'msql_ *'函數中的'MYSQLI_ASSOC'? – Musa

+0

var_dump返回「類型(mysql結果)的資源(6)」 – rharrison33

回答

3

你查詢的可能不會返回任何結果假設之前(所以foreach不是一個陣列上運行),你應該總是檢查,看是否有成果有:

$result = mysql_query($sql) 
    or die('query inupdateVIfromScoresfailed:'.mysql_error().'<br/>sql:'.$sql.'<br/>'); 

if(mysql_num_rows($result)){ 
    foreach(mysql_fetch_array($result, MYSQLI_ASSOC) as $key => $value){ 
     $vi += $vi__weight_array{$key} * $value; 
    } 
} 
else{ 
    // log it or something 
} 

未經測試的代碼,但你希望得到這個想法。

乾杯

+0

是的,查詢沒有返回任何結果。感謝您的建議!回到繪圖板。 – rharrison33

+0

很高興能幫到你。如果您覺得我的答案是正確的,請點擊左上角的複選標記,考慮將其作爲正確答案來接受。 – Madbreaks

+0

很高興接受。謝謝! – rharrison33

0

試試這個功能

function updateVIfromScores($client_id, $vi__weight_array){ 
    $vi = 0; 
    $sql = "SELECT * FROM client_vulnerability_scores 
     WHERE client_id = $client_id"; 
    $result = mysql_query($sql) or die('query in updateVIfromScores failed:'.mysql_error().'<br/>sql:'.$sql.'<br/>'); 

    if (is_array($result)) 
     foreach(mysql_fetch_array($result, MYSQLI_ASSOC) as $key => $value){ 
      $vi += $vi__weight_array{$key} * $value; 
     } 
    } 
    return $vi; 
} 
0

迴響在php下面的查詢,從瀏覽器中複製查詢,並在phpMyAdmin直接對數據庫運行,看看它是否返回任何結果:

echo $sql = "SELECT * FROM client_vulnerability_scores WHERE client_id = $client_id"; 
相關問題