PHP mysqli_fetch_array应该得到一个布尔值

时间:2014-08-27 08:21:19

标签: php

$result = mysqli_query($conn,"SELECT * FROM Players");
if ($result !== FALSE) {
    while($row = mysqli_fetch_array($result)) {
        $result = mysqli_query($conn,"UPDATE Players SET Score='$score' WHERE ID='$id'");
    }
}

有效。也就是说,数据库确实已经更新,一切都很酷。

但它会发出警告:

  

警告:mysqli_fetch_array()期望参数1为mysqli_result,   给定布尔值

如果您四处搜索,则说明查询失败 - 因此,它返回FALSE,因此您会收到警告。

......但这在我的案例中没有意义。查询未失败。当我运行这个脚本时,我的数据库就更新了。此外,还有一个条件检查,如果结果是之前使用mysqli_fetch_array的布尔,那么从技术上讲,这个警告永远不会发生在第一位。

无论如何,问题必须是$result。我们来做:

echo gettype($result);

结果是

  

“对象”

嗯,这解释了为什么它会通过这个条件。但是,这仍然无法解释为什么mysqli_fetch_array坚持这是一个布尔值(因为它不是)。

那么问题是什么?

使用PHP 5.3.24和5.4.19进行测试。

3 个答案:

答案 0 :(得分:7)

您正在使用来自循环中UPDATE查询的新$result值覆盖SELECT查询中的结果集$result

while($row = mysqli_fetch_array($result)) {
    $result2 = mysqli_query($conn,"UPDATE Players SET Score='$score' WHERE ID='$id'");
}

答案 1 :(得分:1)

$ update结果数组在更新表时不返回任何内容。这就是为什么,当你试图将$ result中的数据提取到$ row时,你在while循环中收到此警告。

答案 2 :(得分:1)

在while循环中使用相同的变量名称' $ result'以前已经使用过的。在循环内更改变量名称。

while($ row = mysqli_fetch_array($ result)){         $ result = mysqli_query($ conn," UPDATE Players SET Score =' $ score' WHERE ID =' $ id'");     }