0

如果字段值大于或等于 1 ( >= 1),我想减少数据库表值。否则(如果它小于 1)那么我想删除整个数据库记录,我的代码会连续递减该值,但当它小于 1 时不会删除该记录。

我认为该$Check变量不包含Quantity字段值,但我不确定:

使用 MySQL

这是我的代码:

$Check = "SELECT Quantity FROM Cart WHERE ItemCode = '1'";

if($Check >= '1')
{
    $Query = "UPDATE Cart SET Quantity = Quantity - 1 WHERE ItemCode = '1'";
    mysql_query($Query);
}
else
{
    $DeleteRow = "DELETE FROM Cart WHERE ItemCode = '1'";   
    mysql_query($DeleteRow);
}

mysql_close();
4

2 回答 2

0

您实际上从未运行查询来获取记录计数,您只是将查询字符串本身存储到$Count变量中。这就是它不断减少计数的原因。

您可以运行查询然后提取数量列(运行查询的返回值是结果集,您仍然需要提取列值)但这也有问题,特别是数据可能会在检查和更新/删除(称为竞争条件)。

从数据库的角度来看,这里最好的做法是启动一个事务以确保整个事情是原子的。在交易中,您将拥有:

update cart set quantity = quantity - 1 where itemcode = '1'
delete from cart where quantity < 1 and itemcode = '1'

这保证了操作完全符合您的需要,而不会出现竞争条件。

于 2013-05-28T22:29:34.057 回答
0

试试这段代码:

<?php

    $Check = "SELECT Quantity FROM Cart WHERE ItemCode = '1'";
    $result = mysql_query($Check);

    $row = mysql_fetch_assoc($result);
    if($row['Quantity'] >= '1'){
    $Query = "UPDATE Cart SET Quantity = ".$row['Quantity']." - 1 WHERE ItemCode = '1'";

    mysql_query($Query);

    }
    else
    {
    $DeleteRow = "DELETE FROM Cart WHERE ItemCode = '1'";
    mysql_query($DeleteRow);
    }

    mysql_close();

?>

当你让这段代码运行正常时,尝试以程序方式将其适配到 mysqli 扩展;不推荐使用 mysql 扩展。

不推荐使用mysql扩展;您应该尝试 mysqli 或 PDO,点击此链接并做出您的选择:http ://www.phptherightway.com/#databases

于 2013-05-28T22:22:30.410 回答