【问题标题】:PDO UPDATE creates a new record instead of updating onePDO UPDATE 创建一条新记录而不是更新一条
【发布时间】:2012-06-26 22:27:56
【问题描述】:

我正在使用以下代码来更新记录。不好的是它不是在更新记录,而是在添加新记录。

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

我的修改网址是这样的:http://randomsite.com/modify.php?id=1

修改.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,
    )); 
}
?>

【问题讨论】:

  • 你有错误的 sql 语法。更新通常看起来像: UPDATE table_name SET field1=$somevalue, field2=$anothervalue WHERE somefield=$thirdvalue
  • 给观众的迟来的提示 - 原始问题似乎已更改为更正的代码,因此问题丢失了。编辑:回滚。

标签: php database pdo


【解决方案1】:

您的 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 的部分想法是避免这样做。

【讨论】:

  • 试过了,还是不行。用我当前的代码更新了我的第一篇文章。
  • 奇怪的东西! update 不应该插入。所以你得到重复的条目?你能描述一下你的桌子吗?你用的是什么版本的mysql?
【解决方案2】:

让它工作!

工作代码:

<?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");
    }

?> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 2022-11-30
    相关资源
    最近更新 更多