我正在开发的网站有一个管理页面,用于将产品添加到数据库或编辑数据库中的现有产品。如果两个管理员想要编辑同一个产品,第二个管理员应该收到产品已经/正在更新的警报。当 2 个管理员尝试编辑同一个产品时,我如何在 php/sql 中检测到?
我还没有真正尝试过任何东西,因为我不知道该尝试什么或从哪里开始。
这是我的函数如何查找更新数据库中的产品:
//I know this is a VERY unsafe function, this website will never go online!
FUNCTION updateProduct($data) {
include_once 'dbconn.php';
try {
$conn = connectToDb();
if ($data['imageChanged'] == false) {
$query = "SELECT img_url FROM products WHERE product_id=".$data['productId'];
$result = mysqli_query($conn, $query);
if ($result == false) {
throw new Exception('Failed to execute: '. $query . 'Error: '. mysqli_error($conn));
}
$imgUrl = mysqli_fetch_row($result)[0];
} else {
$imgUrl = $data['image'];
}
$query2 = "img_url='".$imgUrl."'";
$query = "UPDATE products
SET product_name='".$data['productName']."', product_desc='".$data['productDesc']."', price=".$data['price'].", ". $query2 . "
WHERE product_id=".$data['productId'];
$result = mysqli_query($conn, $query);
if ($result == false) {
throw new Exception('Failed to execute: '. $query . 'Error: '. mysqli_error($conn));
}
} finally {
mysqli_close($conn);
}
}
编辑:不需要在更新后存储旧数据,也不需要存储正在进行的更新(关于这可能是重复的问题)。我想知道的是:如果 admin_1 正在更新一行,而 admin_2 正在尝试在 admin_1 的事务仍在进行时更新同一行,我的脚本如何检测到这种情况正在发生?
沧海一幻觉