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

项目日志

我的问题是,如果删除数据,我添加的最后一个项目名将被插入到日志历史记录中,而不是我删除的项目名。
如何获取我删除的最后一个项目名?
这是我在删除按钮上的代码
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");}
发布于 2021-06-25 03:17:57
我相信你能做到的:
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的面向对象的样式,这将使您的代码更简洁、更容易理解。
https://stackoverflow.com/questions/68124837
复制相似问题