2016-09-25 6 views
2

PDO更新クエリコードの使用に問題があります。情報を変更して保存ボタンをクリックして個人の1レコードを編集すると、1レコードのみを更新するすべてのレコードに影響します。すべてのレコードは同じ情報を持っています。他のレコードに影響を与えずに1つのレコードを更新するにはどうすればよいですか?前もって感謝します。コミュニティのwikiとして投稿PHP PDO更新クエリは、実行時にすべての行に影響します

<?php 
include ('includes/connection.php'); 
$id = isset($_GET['id']) ? $_GET['id']: die('Error: Record ID not found.'); 

try { 
    $query_select = "SELECT id, profile_picture, first_name, last_name, gender, age, date_birth FROM tbl_records WHERE id = ? LIMIT 0,1"; 
    $query_statement = $db_connection->prepare($query_select); 

    $query_statement->bindParam(1, $id); 

    $query_statement->execute(); 

    $row = $query_statement->fetch(); 

    $profilePicture = $row['profile_picture']; 
    $firstName = $row['first_name']; 
    $lastName = $row['last_name']; 
    $gender = $row['gender']; 
    $age = $row['age']; 
    $dateBirth = $row['date_birth']; 
} 

catch(PDOException $e) { 
    die('Error 1: '. $e->getMessage()); 
} 

if($_POST) { 
    try { 
     $query_update = "UPDATE tbl_records SET 
     profile_picture = :t_profile_picture, 
     first_name = :t_first_name, 
     last_name = :t_last_name, 
     gender = :t_gender, 
     age = :t_age; 
     date_birth = :t_date_birth 
     WHERE id = :t_id"; 

     $query_statement = $db_connection->prepare($query_update); 

     $profilePicture = htmlspecialchars(strip_tags($_POST['profile-picture'])); 
     $firstName = htmlspecialchars(strip_tags($_POST['first-name'])); 
     $lastName = htmlspecialchars(strip_tags($_POST['last-name'])); 
     $gender = htmlspecialchars(strip_tags($_POST['gender'])); 
     $age = htmlspecialchars(strip_tags($_POST['age'])); 
     $dateBirth = htmlspecialchars(strip_tags($_POST['date-birth'])); 

     $query_statement->bindParam(':t_profile_picture', $profilePicture); 
     $query_statement->bindParam(':t_first_name', $firstName); 
     $query_statement->bindParam(':t_last_name', $lastName); 
     $query_statement->bindParam(':t_gender', $gender); 
     $query_statement->bindParam(':t_age', $age); 
     $query_statement->bindParam(':t_date_birth', $dateBirth); 
     $query_statement->bindParam(':t_id', $id); 

     if($query_statement->execute()) { 
      echo "<div class='alert alert-success' role='start'>Record was updated</div>"; 
     } 

     else { 
      echo "<div class='alert alert-danger' role='start'>Unable to update the record.</div>"; 
     } 
      echo var_dump($query_statement->rowCount()); 
    } 

    catch(PDOException $e) { 
     die('ERROR 2: ' . $e->getMessage()); 
    } 
} 
?> 

<html> 
<body> 
<form action="update.php?id=<?php echo htmlspecialchars($id); ?>" method="post"> 
    <input type="hidden" name="id" value="<?php echo htmlspecialchars($id, ENT_QUOTES); ?>" /> 
    <input type="file" name="profile-picture" value="<?php echo htmlspecialchars($profilePicture, ENT_QUOTES); ?>" /> 

    <label for="first-name">First name:</label> <br /> 
    <input type="text" name="first-name" value="<?php echo htmlspecialchars($firstName, ENT_QUOTES); ?>" /> <br /> 

    <label for="last-name">Last name:</label> <br /> 
    <input type="text" name="last-name" value="<?php echo htmlspecialchars($lastName, ENT_QUOTES); ?>" /> <br /> 

    <label for="gender">Gender:</label> <br /> 
    <input type="text" name="gender" value="<?php echo htmlspecialchars($gender); ?>" /> <br /> 

    <label for="age">Age:</label> <br /> 
    <input type="text" name="age" value="<?php echo htmlspecialchars($age); ?>" /> <br /> 

    <label for="date-birth">Date of Birth:</label> <br /> 
    <input type="date" name="date-birth" value="<?php echo htmlspecialchars($dateBirth); ?>" /> <br /> 

    <input class="button-style" type="submit" value="SAVE" /> 
</form> 
</body> 
</html> 
+3

'age =:t_age;' <<<文末。それはカンマでなければなりません。それがすべてを更新している理由です。セミコロンは実際には有効な文字であり、エラーは発生しません。 'date_birth'カラムも更新されません。 –

+0

は、タイプミスとしてクローズすると投票しました。 –

+0

@ Fred-ii-ありがとうございます。私は数時間を要した問題を探しています。その原因は単にタイプミスです。<ありがとう! – lvlzero

答えて

2

update.phpを

、私はこのから何の担当者を望んでいません。

age = :t_age; < < <は文末にあります。それはカンマでなければなりません。それがすべてを更新している理由です。

セミコロンは実際には有効な文字で、エラーは発生しません。 date_birthも更新されません。

参考:CやPerlと同様に

、PHPはは、各ステートメントの末尾にセミコロンでを終了させるための指示を必要とします。 PHPコードのブロックの終了タグは自動的にセミコロンを意味します。 PHPブロックの最後の行を終了するセミコロンを持つ必要はありません。ブロックの終了タグには、直後の改行がある場合はその改行が含まれます。

関連する問題