2012-04-28 51 views
0

我綁定到update一定數量的記錄,在我的代碼$tickets = 10這意味着我需要更新10條記錄只在數據庫accroding MySQL標準在這裏我for loop更新所有的記錄(100記錄一次!)我的標準,這裏是我的代碼每次更新一個mysql記錄每次在for循環計數在php

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計數更新一個記錄?

+0

-1:爲什麼你第二次問這個問題? http://stackoverflow.com/questions/10364192/updaing-sql-table-using-update-mysql-and-php-syntax – eggyal 2012-04-28 16:01:38

+0

它不是相同的問題,也許是相同的代碼.. – 2012-04-28 16:02:41

+0

@eggyal之前,你給了我 - 1「非常感謝你」可能你應該看看這些問題,第一個代碼沒有工作,現在它可以工作,但還有另一個問題 – 2012-04-28 16:04:15

回答

1

您可以在代碼中使用限制,使你的代碼woulde是

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注入安全問題的風險。請看看它。

0

沒有看到更多的兩個PHP代碼和數據庫內容的背景下,它看起來像這樣的代碼將基本運行相同的SQL 10倍。每次循環執行時,我都看不到$ eventId或$ chooseClass的更改。而且,如果有超過1個(OT 100,因爲它似乎)匹配記錄($ EVENTID和$ chooseClass的組合)在您的數據集上面的代碼將更新每個循環不止一個記錄。

您需要首先從SQL的角度來看它,詢問您想要更新的內容,並查看SQL會做什麼,然後創建一個循環,一次更新一條記錄。

或者,你想爲出售或不只是劃出10走出了一條可能的門票?

然後一個SQL語句,像更新表成套出售=無限制10應該這樣做。 (未經測試psudo代碼)

1

如果我理解它是正確的,您希望更新10個具有給定businessreservationIdFk和classIDfk的條目,並且這樣做是爲了使得如果沒有足夠的空閒條目,您最終不會得到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!"; 
} 

那假設你的檢查參數(在其中的)標識全部不預訂的門票,但我認爲你有另一個錯誤在這裏,只有檢查門票來自期望的類型和預期的商業類型,如果它們已經預訂了,則不是。也許你還應該檢查f ticketSold處於「未預訂」之類的狀態。

編輯:請注意,不需要循環