首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果删除数据并将其插入到另一个表中,如何获取数据?

问如果删除数据并将其插入到另一个表中,如何获取数据?
EN

Stack Overflow用户
提问于 2021-06-25 02:53:38
回答 1查看 79关注 0票数 0

我有一个小项目,有项目管理和日志记录。

项目管理

​

项目日志

​

我的问题是,如果删除数据,我添加的最后一个项目名将被插入到日志历史记录中,而不是我删除的项目名。

如何获取我删除的最后一个项目名?

这是我在删除按钮上的代码

代码语言:javascript
复制
    if(isset($_GET['delete'])) {
  $the_item_management_id = $_GET['delete'];
  $query = "DELETE FROM item_management WHERE item_management_id = {$the_item_management_id}";
  $delete_query = mysqli_query($connection, $query);

  $query1 = "INSERT INTO item_management_log (item_code_id, item_name, deleted_stock) VALUES ('$item_code_id', '$item_name', 'deleted $item_name from the stock')";
  mysqli_query($connection, $query1);
  header("Location:inventory_management.php");

}

EN

回答 1

Stack Overflow用户

发布于 2021-06-25 03:17:57

我相信你能做到的:

代码语言:javascript
复制
if (isset($_GET["delete"])) {
    mysqli_begin_transaction($connection); // Using transactions.

    // Execute log insertion first.
    $stm_log = mysqli_prepare($connection, "INSERT INTO item_management_log (item_code_id, item_name, deleted_stock) VALUES (?, ?, ?)");

    $log_message = "deleted $item_name from the stock";
    mysqli_stmt_bind_param($stm_log, "iss", $item_code_id, $item_name, $log_message);
    mysqli_stmt_execute($stm_log);

    // Remove the item later.
    $stm_delete = mysqli_prepare($connection, "DELETE FROM item_management WHERE item_management_id = ?");

    $the_item_management_id = $_GET["delete"];

    mysqli_stmt_bind_param($stm_delete, "i", $the_item_management_id);
    mysqli_stmt_execute($stm_delete);

    if (mysqli_stmt_affected_rows($stm_delete) > 0) {
        mysqli_commit($connection);
    } else {
        mysqli_rollback($connection); // Undo everything if nothing was deleted.
    }

    header("Location:inventory_management.php");
}

为什么事务

您应该使用事务处理,因为您可能希望记录实际发生的事情,因此如果删除项目时发生错误,则可以中止(通过回滚)记录日志。这样,数据库中就不会有不准确的日志。

Note

我还使用了mysqli_stmt_affected_rows,这样就可以知道受影响记录的数量,从而知道一个项目是否真的被删除了。

另外,我认为您应该使用PDO,而不是mysqli,因为mysqli是一个更友好的api。或者至少您应该使用mysqli的面向对象的样式,这将使您的代码更简洁、更容易理解。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68124837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档