PHP - 警告:为foreach提供的无效参数()

问题描述:

我不明白为什么我得到这个警告:“警告:为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

你查询的可能不会返回任何结果假设之前(所以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

试试这个功能

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; 
} 

回响在php下面的查询,从浏览器中复制查询,并在phpMyAdmin直接对数据库运行,看看它是否返回任何结果:

echo $sql = "SELECT * FROM client_vulnerability_scores WHERE client_id = $client_id";