Php 如何根据批次号更新库存数量
我正在开发一个应用程序,在该应用程序中,我使用不同的批号保存一个项目的数量。请查看数据库示例:Php 如何根据批次号更新库存数量,php,mysql,Php,Mysql,我正在开发一个应用程序,在该应用程序中,我使用不同的批号保存一个项目的数量。请查看数据库示例: 总和(qty\u avbl)显示可供销售的总数量为17。我想卖一件7件的货。如何从上表中选择并将该项目插入销售表 我尝试过以下代码: $pid = 7901; $order = 7; $gets = mysqli_query($con, "SELECT * FROM `purchase_order`
总和(qty\u avbl)
显示可供销售的总数量为17。我想卖一件7件的货。如何从上表中选择并将该项目插入销售表
我尝试过以下代码:
$pid = 7901;
$order = 7;
$gets = mysqli_query($con, "SELECT *
FROM `purchase_order`
WHERE `pid` LIKE '$pid'
AND `qty_avbl` > 0 ")
or die(mysqli_error($con));
while($rows = mysqli_fetch_array($gets)){
$getBatchNumber = $rows['batch_number'];
$qty_avble = $rows['qty_avbl'];
mysqli_query($con,"UPDATE `purchase_order`
SET `qty_avbl`=`qty_avbl` - $order
WHERE `qty_avbl` > 0
LIMIT 1")
or die("err Update ".mysqli_error($con));
}
警告您当前的代码易受SQL注入攻击。请确保始终使用参数化的预处理语句,并且不要在代码中使用
die(mysqli_erro($con))
不需要任何PHP逻辑就可以解决这个问题。在SQL中,最好一步完成此类操作。然而,这项任务不是很容易一步完成,但它是可能的一个技巧。诀窍是在UPDATE
语句中使用一个临时变量来跟踪已使用的库存
$con->begin_transaction();
$con->query('SET @qty = 7');
$stmt = $con->prepare('UPDATE purchase_order
SET qty_avbl = qty_avbl-(@bought := LEAST(@qty,qty_avbl)),
qty_avbl = if(@qty := @qty-@bought, qty_avbl, qty_avbl)
WHERE pid = ?
ORDER BY batch_number');
$stmt->bind_param('s', $pid);
$stmt->execute();
$con->commit();
好的代码缩进将帮助我们阅读代码,更重要的是,它将帮助您为自己的利益调试代码。您可能会被要求在几周/几个月内修改此代码,最终您将感谢我。您的脚本将开放给我。甚至您也应该始终在
MYSQLI_uquot>或PDO
API中使用,而不是将用户提供的值连接到查询中。永远不要相信任何用户输入!使用die(mysqli_error($conn))是一个非常糟糕的主意
在您的代码中,因为它可能会泄漏敏感信息。有关更多说明,请参阅本文: