php - 如果元素未经验证,如何停止更新
问题描述
我的更新有问题。我更新了我的库存,删除了制作食物所需的数量(库存 = 库存 - :数量),如果我的库存<=0
打印我没有足够的元素来制作食物。
这是我的代码:
<?php
$query1 = "SELECT ingredients.stock as stock,
composition.id_ingredient,composition.quantite
rom composition
join ingredients on(composition.id_ingredient = ingredients.id)
where id_recette = 1;";
$response1 = $db->query($query1);
$response1->setFetchMode(PDO::FETCH_ASSOC );
foreach ($response1 as $row1) {
$persons1[] = $row1;
}
$response1->closeCursor();
?>
<?php
if (isset($_GET['burger1']) AND $_GET['burger1'] == 'fabriquer') {
foreach ($persons1 as $ET10) {
if($ET10['stock'] - $ET10['quantite']<0){
echo "Stock insuffisant de: ".$ET10['id_ingredient'];
;
}
}else if($ET10['stock'] - $ET10['quantite']>=0){
$req=$db->prepare("UPDATE ingredients SET stock = stock - :quantite WHERE id = :ingredient");
$req->execute(array(
'quantite' => $ET10['quantite'],
'ingredient' => $ET10['id_ingredient'])
);
}
?>
<?php
}
?>
问题是我打印了消息,如果我点击我的按钮“fabriquer”,它将继续更新其他元素,它们的(库存 - 数量)> 0。但是我想说,如果我们没有足够的库存,就不可能制作食物。因此,如果无法更新 1 个元素,我想停止更新。
感谢阅读我!
解决方案
添加检查约束,以便数据库确保数据完整性,而不是应用程序。
alter table ingredients add constraint chk_ingredients_stock_gt_0
check (stock >= 0);
检查约束实际上是从 MySQL 8.0.16 开始强制执行的。
推荐阅读
- iot - 物联网中心自定义规则
- r - 检测语言环境时出错:read.table 中的错误(file = file,header = header .. 如何解决这个问题?
- python - 自己的类的类似 Numpy 的方法
- acumatica - DAC 中的 DateTime 字段导致异常
- .net-core - Azure 函数服务总线主题触发器休眠
- matrix - 找出循环的 CSR x CSR 矩阵乘法
- python-3.x - pyModbusTCP 每秒失败一次功能
- swift - SwiftUI onTapGesture interact with caller only
- angular - 在浏览器中打开 devtools 之前,传单地图未完全渲染 - 角度版本 10 中面临的问题
- python - 来自 gs 云客户端 MaxRetryError 或 WRONG_VERSION_NUMBER 的 python ssl 错误