2012-06-26 86 views
3

我正在使用以下代码来更新记录。糟糕的是它没有更新记录,而是添加了新记录。PDO UPDATE创建新记录而不是更新一个

我在做什么错?我希望它能更新记录而不是创建一个现在的记录。

我修改URL看起来是这样的:http://randomsite.com/modify.php?id=1

Modify.php代码:

<?php 
    require_once("connect.php"); 

    $query = "SELECT * FROM cars WHERE id = :id"; 

    $result = $odb->prepare($query); 
    $result->execute(array(':id' => $_REQUEST['id'])); 

    while ($row = $result->fetch(PDO::FETCH_ASSOC)) { ?> 


    <h1>Modify a car</h1> 
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    Brand:  <input type="text" name="brand" value="<?php echo $row['brand']; ?>" /><br /> 
    Model:  <input type="text" name="model" value="<?php echo $row['model']; ?>" /><br /> 
    Year:  <input type="text" name="year" value="<?php echo $row['year']; ?>" /><br /> 
    ID:  <input type="text" name="id" value="<?php echo $row['id']; }?>" /><br /> 
    <input type="submit" value="Modify" /> 
    </form> 

    <?php 

    if(isset($_POST['submit'])) { 
    $id = $_POST['id']; 
    $brand = $_POST['brand']; 
    $model = $_POST['model']; 
    $year = $_POST['year']; 
    $q  = "UPDATE cars WHERE id = $_GET[id] (id, brand, model, year) VALUES(:id, :brand, :model, :year)"; 
    $query = $odb->prepare($q); 
    $results = $query->execute(array(
      ":id" => $id, 
      ":brand" => $brand, 
      ":model" => $model, 
      ":year" => $year, 
    )); 
} 
?> 
+0

你有错的SQL语法。更新通常看起来像这样:UPDATE table_name SET field1 = $ somevalue,field2 = $ anothervalue WHERE somefield = $ thirdvalue – cen

+0

对观看者的迟到笔记 - 原始问题似乎已更改为已更正的代码,因此问题已消失。编辑:回滚。 –

回答

4

你的SQL看起来应该更像是这样的:

$q = "UPDATE cars SET 
      id = :id, 
      brand = :brand, 
      model = :model, 
      year = :year 
      WHERE id = :oldid"; 

    $query = $odb->prepare($q); 
    $results = $query->execute(array(
      ":id" => $id, 
      ":brand" => $brand, 
      ":model" => $model, 
      ":year" => $year, 
      ":oldid" => $_GET['id'], 
    )); 

作为一个侧面说明,尽量不要在你的SQL中放置变量(像你的$ _GET ['id']),使用PDO的一部分是避免这样做。

+1

试过,仍然无法让它工作。用我当前的代码更新我的第一篇文章。 – Joost

+1

奇怪的东西!更新不应该做一个插入。所以你得到重复的条目?你能描述一下你的餐桌吗?你使用的是哪个版本的mysql? –

+1

得到它的工作=) – Joost

1

得到它的工作!

工作代码:

<?php 
    require_once("connect.php"); 

    $query = "SELECT * FROM cars WHERE id = :id"; 

    $result = $dbh->prepare($query); 
    $result->execute(array(':id' => $_REQUEST['id'])); 

    while ($row = $result->fetch(PDO::FETCH_ASSOC)) { ?> 

    <h1>Modify a car</h1> 
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    Brand:  <input type="text" name="brand" value="<?php echo $row['brand']; ?>" /><br /> 
    Model:  <input type="text" name="model" value="<?php echo $row['model']; ?>" /><br /> 
    Year:  <input type="text" name="year" value="<?php echo $row['year']; ?>" /><br /> 
    ID:   <input type="text" name="id" value="<?php echo $row['id']; }?>" /><br /> 
    <input type="submit" value="Modify" name="submit"/> 
    </form> 

    <?php 

    if(isset($_POST['submit'])) { 
    $brand = $_POST['brand']; 
    $model = $_POST['model']; 
    $year = $_POST['year']; 
    $id = $_POST['id']; 

    $queryupdate = "UPDATE cars SET 
      brand= :brand, model= :model, year= :year WHERE id= :id"; 
    $q = $dbh->prepare($queryupdate); 
    $q->execute(array(
      ":id" => $id, 
      ":brand" => $brand, 
      ":model" => $model, 
      ":year" => $year)); 

      //Send them back to the page they were at/ 
header("location:admin.php"); 
    } 

?> 
相关问题