如果列值小于或等于用户的输入值并提醒用户,我想中止批处理sql查询事务。
发生了什么事
这是我的查询:
foreach($menuData as $item=>$qty)
{
if(empty($qty) || $qty == '0')
continue;
$sqlArray[] = "INSERT INTO food_order
(user_id, item_id, quantity, order_type, updated_on, updated_by, created_by, created_on)
VALUES ($uid, $item, $qty, '$menu_type', NOW(), $uid, $uid, NOW())";
$sqlArray[] = "UPDATE food_menu SET available_qty = IF($qty >= available_qty, available_qty - $qty, available_qty) WHERE item_id = $item AND type = '$menu_type' AND DATE(updated_on) = CURRENT_DATE";
}
return (boolean) $this->db->exec($sqlArray);
$qty
的值大于available_qty
字段的值,我想中止$sqlArray[]
中的整个交易系列。我可以在查询本身中这样做吗?
答案 0 :(得分:1)
我认为一种更好的方法是在插入和更新语句开始之前检查剩余数量中的可用数量。但是为了提供信息,您可以尝试以下操作:
在food_menu表上创建更新前触发器。在触发器中,检查可用数量是否为负,这意味着订单数量大于可用数量,然后使用SIGNAL
语句引发错误,您必须将其捕获在代码中并进行回滚并显示适当的消息给用户。