Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中,每次for循环计数时更新一条mysql记录_Php_Mysql - Fatal编程技术网

在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!";
}