我正在update
绑定一定数量的记录,在我的代码中这里$tickets
= 10,这意味着我只需要根据mysql标准更新数据库中的10条记录,我在这里for loop
更新所有记录(一次更新100条记录!
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/>";
}
}
如何实现每次for
计数时更新一条记录?
您可以在代码中使用 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")
附言。我认为您的代码可能会给SQL注入安全问题带来风险。也请看一下。
如果我理解正确,您希望使用给定的 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 是否处于"未预订"之类的状态。
编辑:请注意,不需要循环
如果没有看到 PHP 代码和数据库内容的更多上下文,看起来这段代码基本上会运行相同的 SQL 10 次。每次循环执行时,我没有看到$eventId或$chooseClass在哪里变化。而且,如果您的数据集中有超过 1 条(看起来是 100 条)匹配记录(用于 $eventId 和 $chooseClass 的组合),则上述代码将在每个循环中更新多个记录。
你需要首先从SQL的角度来看待它,问你想更新什么,看看SQL会做什么,然后讨论一个一次更新一条记录的循环。
或者,您是否试图将可能的门票中的 10 张标记为已售出?
然后一个像更新表集出售=没有限制10这样的SQL语句应该可以做到这一点。(未经测试的 psudo 代码)