php - PDO UPDATE 创建一个新记录而不是更新一个记录

标签 php database pdo

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

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

我的修改 url 如下所示: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 应该看起来更像这样:

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

关于php - PDO UPDATE 创建一个新记录而不是更新一个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216818/

相关文章:

database - 对于简单的键值模式,YugaBytes 在 Redis 客户端和 Postgres 客户端之间的性能比较如何?

PHP PDO 准备插入查询。值未传递的问题

C++:使用sqlite创建动态数据库以传输语音流

php - Mysql + PHP + 谷歌地图 API

php - 搜索 Ignited 数据表 CodeIgniter

javascript - PHP 和 MYSQL 系统(加上 HTML,CSS&JS)

arrays - 在 R 中将多列转换为 Json 数组?

php - 使用 WHERE 选择所有内容

php - PDO更新不起作用,没有错误

php - 在一个 php 页面中使用两个表 (mysql)