每次for循环在php中计数时更新一条mysql记录

时间:2012-04-28 15:55:37

标签: php mysql

我正在追踪update一定数量的记录,在我的代码$tickets = 10中,这意味着我只需要根据mysql条件更新10条记录,我的{{{ 1}}这里为我的标准更新所有记录(一次100条记录!),这是我的代码

for loop

每次for ($counter = 1; $counter <= $tickets; $counter++) { $bookTicket = mysql_query("UPDATE units SET ticketSold = 'No', userIdFK = '$chooseUser' WHERE BusinessreservationIdFk = '$eventId' AND classIDfk ='$chooseClass' ") or die(mysql_error()); if ($bookTicket) { echo "<br/>ticket " . $counter . " done !"; } else { echo "no<br/>"; } } 计数时,如何更新一条记录?

3 个答案:

答案 0 :(得分:1)

您可以在代码中使用LIMIT,这样您的代码就可以

for ($counter = 1; $counter <= $tickets; $counter++) {

    $bookTicket = mysql_query("UPDATE units SET 
    ticketSold = 'No',
    userIdFK = '$chooseUser' 
    WHERE BusinessreservationIdFk = '$eventId' 
          AND classIDfk ='$chooseClass' LIMIT 1") //ADD LIMIT TO THIS LINE
    or die(mysql_error());

    if ($bookTicket) 
    {
         echo "<br/>ticket " . $counter . "  done !";
    } 
    else 
    {
         echo "no<br/>";
    }                                                            
}

但我认为你应该使用它,所以你一次只能使用1个查询。

$bookTicket = mysql_query("UPDATE units SET 
ticketSold = 'No',
userIdFK = '$chooseUser' 
WHERE BusinessreservationIdFk = '$eventId' 
      AND classIDfk ='$chooseClass' LIMIT 10")

PS。我认为你的代码会有SQL注入安全问题的风险。请看一下。

答案 1 :(得分:1)

如果我理解正确,你想用给定的businessreservationIdFk和classIDfk更新10个条目,并且这样做,如果没有足够的免费条目,你不会得到0保留,但是有可用的(例如要求的10个中的6个)。

你可以这样做:

$bookTicket = mysql_query("UPDATE units SET 
    ticketSold = 'No',
    userIdFK = '" . $chooseUser . "' 
WHERE BusinessreservationIdFk = '" . $eventId . "' AND
    classIDfk ='" . $chooseClass . "'
LIMIT 
    10
") or die(mysql_error());

if ($bookTicket){
     $num = mysql_query("SELECT COUNT(1) FROM units WHERE userIdFK = '".$chooseUser."'");
     $num = mysql_fetch_array($num)[0];
     echo $num . " tickets booked.";
}else{
     echo "Not a single ticket available!";
}

假设您的检查参数(WHERE之后的那些)标识了所有未预订的门票,但我认为您在此处有另一个错误,并且只检查门票是否来自预期的类型和预期的业务,而不是已经预订或未预订。也许你也应该检查f ticketSold是否处于“未预订”等状态。

编辑:请注意,不需要循环

答案 2 :(得分:0)

如果没有看到PHP代码和数据库内容的更多上下文,看起来这段代码基本上会运行相同的SQL 10次。每次循环执行时,我都看不到$ eventId或$ chooseClass的变化。并且,如果您的数据集中有多个匹配记录(对于$ eventId和$ chooseClass的组合),则上述代码将为每个循环更新多个记录。

您需要首先从SQL的角度来看它,询问您想要更新的内容,看看SQL会做什么,然后讨论一次更新一条记录的循环。

或者,您是否只想在售出或不售出的票中标出10张?

然后,像update table set sold = no limit 10这样的一个SQL语句应该这样做。 (未经测试的psudo代码)