在php中,每次for循环计数时更新一条mysql记录
我要更新一定数量的记录,在我的代码中,在php中,每次for循环计数时更新一条mysql记录,php,mysql,Php,Mysql,我要更新一定数量的记录,在我的代码中,$tickets=10,这意味着我只需要根据mysql标准更新数据库中的10条记录,我的for loop在这里更新所有记录(一次更新100条记录!)对于我的标准,这是我的代码 for ($counter = 1; $counter <= $tickets; $counter++) { $bookTicket = mysql_query("UPDATE units SET ticketSold = 'No', userIdFK
$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($counter=1;$counter在没有看到PHP代码和数据库内容的更多上下文的情况下,看起来这段代码基本上会运行相同的SQL 10次。我看不出每次循环执行时$eventId或$chooseClass在哪里更改。如果匹配记录超过1条(看起来不是100条),那么(对于$eventId和$chooseClass的组合)在您的数据集中,上面的代码将在每个循环中更新多个记录
首先,您需要从am SQL的角度来看它,询问您想要更新什么,看看SQL会做什么,然后创建一个一次更新一条记录的循环
或者,你是在试图从一张可能的票中划出10张已售出还是未售出
然后,像updatetablesetsalld=nolimit10这样的SQL语句应该可以做到这一点。(未经测试的psudo代码)您可以在代码中使用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/>";
}
}
另外,我认为您的代码会有SQL注入安全问题的风险。请也查看一下。如果我理解正确,您希望使用给定的BusinessReservationDFK和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后面的参数)标识了所有未预订的票证,但我认为您这里还有一个错误,只检查票证是否来自预期的类型和预期的业务,而不是它们是否已预订。也许您还应该检查票证是否处于“未预订”状态或者别的什么
编辑:注意不需要循环-1:你为什么第二次问这个问题?这不是同一个问题,可能是同一个代码。@eggyal在你给我-1“非常感谢”之前也许你应该看看这些问题,第一个问题代码不起作用,现在它起作用了,但还有一个问题你没有注意到关于SQL注入的评论,这是你真正应该注意的。@BEN这只是一个例子,它不是一个需要安全维护的真正的应用程序
$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!";
}