fetch_assoc()循环HTTP ERROR 500

时间:2017-06-21 09:43:42

标签: php sql

无法找到获取结果的方法,sql请求很好,但在使用带有while循环的代码时,它会不断崩溃(HTTP ERROR 500)。

使用$row = $result->fetch_assoc();时没有任何问题,但我必须循环更新每条记录。

$sql = "SELECT * FROM reservations WHERE statut = '1' AND NOW() BETWEEN dateAller AND dateRetour"; // requete sql sur les réservations validées dont la tranche horaire est en cours de validité
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        $sql = "UPDATE vehicules SET statut = '2' WHERE immat = '$row[immat]'";
        $result = $conn->query($sql);
    }
}

3 个答案:

答案 0 :(得分:1)

您在循环中覆盖$result,因此将在第二次迭代中调用->fetch_assoc()语句的结果update。你必须改为:

$sql = "SELECT * FROM reservations WHERE statut = '1' AND NOW() BETWEEN dateAller AND dateRetour"; // requete sql sur les réservations validées dont la tranche horaire est en cours de validité
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        $sql = "UPDATE vehicules SET statut = '2' WHERE immat = '$row[immat]'";
        $result2 = $conn->query($sql);
    }
}

答案 1 :(得分:0)

更改这些行

$sql = "UPDATE vehicules SET statut = '2' WHERE immat = '$row[immat]'";
$result = $conn->query($sql);

$sql = "UPDATE vehicules SET statut = '2' WHERE immat = '".$row['immat']."'";
$conn->query($sql);

您正在使用更新查询的结果覆盖$result。您可能不需要此结果(至少您还没有使用它),因此您可以轻松删除该作业。

此外,您需要'"才能通过密钥访问数组($row)。 在你的情况下,你很幸运,它没有引号。 说明:

PHP看到一个名为immat的常量。如果定义了常量,则返回该值,但未定义该值,PHP将回退到字符串"immat"

无论如何,使用引号总是更好的做法!

答案 2 :(得分:0)

尝试使用这个:

<?php
$sql = "SELECT * FROM reservations WHERE statut = '1' AND NOW() BETWEEN dateAller AND dateRetour";
$result = mysqli_query($conn,$sql);
if (mysqli_num_rows($result) > 0) {
    while ($row = mysqli_fetch_assoc($result)) {
        $immat = $row["immat"];
        $sql = "UPDATE vehicules SET statut = '2' WHERE immat = '$immat'";
        $updateResult = mysqli_query($conn,$sql);
    }
}
?>