更新查询返回true但不更新php

时间:2016-07-16 19:29:35

标签: php mysqli

我检查了所有参数,但是他们的数据正确,但我的查询没有更新表中的数据。

以下是代码:

public function updateRooms($capacity,$rent,$h_id,$t_rooms){
    $conn=DB::connect();

    for($i=1; $i<=$t_rooms; $i++){
        $room_no=$i;
        $sql= "UPDATE room SET ro_capacity='{$capacity[$i]}', ro_rent='{$rent[$i]}', ro_room_no='$room_no' WHERE h_id=".$h_id;

        if($conn->query($sql) === TRUE){
            $last_id = $conn->insert_id;
            echo "New record created successfully.". $last_id;
        }else{
            echo "Error: " . $sql . "<br>" . $conn->error;
        }
    }
    $conn->close();
}

1 个答案:

答案 0 :(得分:0)

从UPDATE查询获取插入ID没有意义。它不会给你任何有用的东西。

此外,你应该使用准备好的陈述。

public function updateRooms($capacity,$rent,$h_id,$t_rooms){
    $conn=DB::connect();

    $sql= "UPDATE room SET ro_capacity=?, ro_rent=?, ro_room_no=? WHERE h_id=?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("iiii",$ro_capacity,$ro_rent,$i,$h_id)
    for($i=1; $i<=$t_rooms; $i++){
        $ro_capacity = $capacity[$i];
        $ro_rent = $rent[$i];
        $stmt->execute();
        echo "The record updated successfully";
    }
}

正如您所看到的,mysqli几乎无法用于准备好的语句。这就是你必须使用PDO的原因:

    $sql= "UPDATE room SET ro_capacity=?, ro_rent=?, ro_room_no=? WHERE h_id=?";
    $stmt = $conn->prepare($sql);
    for($i=1; $i<=$t_rooms; $i++){
        $stmt->execute([$capacity[$i],$rent[$i],$i,$h_id]);
        echo "The record updated successfully";
    }
}