2016-07-16 4 views
0

すべてのパラメータをチェックしていますが、正しいデータを持っていますが、クエリがテーブルのデータを更新していません。ここでupdate query trueを返しますが、データを更新しません。

は、コードは次のとおりです。

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(); 
} 
+0

は、あなたのコードは、SQLインジェクション – Ahmad

+0

行が$ h_idは、値18が含まれており、データベースにも同じ値であり、一致していると非常に脆弱です – user5403480

答えて

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"; 
    } 
} 
関連する問題