0

私は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カウントするたびに1つのレコードを更新するにはどうすればよいですか?

4

3 に答える 3

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インジェクションのセキュリティ問題のリスクになると思います。それも見てください。

于 2012-04-28T16:17:17.293 に答える
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の後のもの)が予約されていないすべてのチケットを識別することを前提としていますが、ここで別の間違いがあると思います。チケットがすでに予約されているかどうかではなく、予想されるタイプと予想されるビジネスからのものであるかどうかのみをチェックします。か否か。たぶん、fticketSoldが「予約されていません」などの状態にあることも確認する必要があります。

編集:ループは必要ないことに注意してください

于 2012-04-28T16:31:55.617 に答える
0

PHPコードとデータベースの内容の両方のコンテキストを詳しく見ることなく、このコードは基本的に同じSQLを10回実行するように見えます。ループが実行されるたびに$eventIdまたは$chooseClassがどこで変更されるかわかりません。また、データセットに($eventIdと$chooseClassの組み合わせの)一致するレコードが1つ(見た目は100)を超える場合、上記のコードはループごとに複数のレコードを更新します。

最初にSQLの観点からそれを見て、何を更新するかを尋ね、SQLがそれをどのように実行するかを確認してから、一度に1つのレコードを更新するループをフォーラム化する必要があります。

または、可能性のあるチケットのうち10個を販売済みかどうかをマークしようとしていますか?

次に、テーブルセットの更新のような1つのSQLステートメントが販売されました=制限なし10がそれを実行する必要があります。(テストされていない疑似コード)

于 2012-04-28T16:13:35.450 に答える