-3

当订单在销售点系统中完成时,我正在尝试更新订单中所有商品的库存数量

到目前为止我的代码是

$order=$_GET["order"];

include('php/config.php');


$invoice=$order;
$voucher=$_GET['voucher'];
$card=$_GET['card'];
$cash=$_GET["cash"];
$date = date('Y-m-d');

$sql="SELECT * FROM `orders` WHERE  `invoice` = '".$invoice."'";

$result = mysql_query($sql);

while ($row = mysql_fetch_array($result)) {
$parts[] = array(
"part" => $row['part'], 
"qty" => $row['qty'], 
 );

$sqlstock = "UPDATE `stock` SET available='available - $parts[qty]' WHERE 

part = '".$parts['part']."'";
}
4

3 回答 3

0

将您的 while 循环更改为此

while ($row = mysql_fetch_array($result)) {
    $parts[] = array(
    "part" => $row['part'], 
    "qty" => $row['qty'], 
     );

    $sqlstock = mysql_query("UPDATE `stock` SET available=available - $parts[qty] WHERE part = 
    '".$part['part']."'");
}
于 2013-05-08T15:24:51.123 回答
0

可能最好将其作为单个 SQL 执行:-

UPDATE stock a INNER JOIN order b ON a.part = b.part 
SET a.available = a.available - b.qty
WHERE  b.invoice` = '$order'

请注意,您不要只是在没有某种方式检查订单尚未用于更新库存的情况下重复运行多次

这样做,如果您的订单上有 1000 件商品,那么它就是一个查询。进行选择然后循环结果将需要 10001 次查询。

于 2013-05-08T15:26:38.597 回答
0

你的主要问题是available='available - $parts[qty]'.$parts.

available='available - $parts[qty]'被解释为字符串,因此将其更改为

available=available - {$parts['qty']}

并更改.$parts..$parts['part']

此外,如果您将其编写为新代码,请考虑将您的mysql_函数转换为mysqli_或使用 PDO,因为 mysl 现在已被弃用,PHP 不再支持。

http://www.php.net/manual/en/mysqli.construct.php

http://uk1.php.net/manual/en/pdo.construct.php

于 2013-05-08T15:31:06.257 回答