update vraagje
Stel ik voer een UPDATE query uit:
UPDATE table SET foo = 'bar' WHERE id = 1
Als ik deze update query uitvoer en ik voer daarna een rowCount uit, dan krijg ik als resultaat 1. Dit wil zeggen dat 1 rij is ge-update.
Als ik nu nogmaals diezelfde UPDATE query uitvoer en ik voer wederom een rowCount uit, dan krijg ik als resultaat 0. Raar? Nee, eigenlijk niet. De 1e keer dat ik de UPDATE query uitvoerde, werd het veld foo gewijzigd in 'bar'. De 2e keer dat ik de query uitvoerde, stond het veld foo al ingesteld op 'bar' en daarom werd er niks gewijzigd. Vandaar dat rowCount als resultaat 0 opleverde.
Nu kan ik de PDO driver zo instellen dat ook in het laatste geval rowCount als resultaat 1 oplevert. Er wordt weliswaar niks gewijzigd, maar de betreffende rij voldoet wel aan de juiste conditie (WHERE id = 1). Er wordt dan dus niet het werkelijke aantal geupdate rijen teruggegeven, maar het aantal dat in aanmerking kwam om geupdate te worden (ik hoop dat jullie het nog kunnen volgen).
Nu vraag ik me dus af wat de meest wenselijke situatie is. Wil je het werkelijke aantal geupdate rijen terugkrijgen, of het aantal rijen dat in aanmerking kwam voor de update?
Even een ander fictief voorbeeld:
Stel er staan exact 1.000 producten in je database en een of andere status van deze producten moet voor alle producten worden gereset naar 0.
UPDATE products SET status = 0
Het toeval wil dat van 7 producten de status nooit geactiveerd is en daarom nog steeds op 0 staat.
We voeren de query uit.
In situatie 1 (de daadwerkelijk aangepaste rijen) krijgen we als resultaat 993 rijen.
In situatie 2 (het aantal rijen dat in aanmerking kwam) krijgen we als resultaat 1.000 rijen.
Wat is nu de wenselijke situatie? In 1e instantie zou ik denken situatie 1 omdat die een juist beeld geeft van de werkelijkheid. Echter, als ik zie dat ik 1.000 producten in de database heb staan en ik zie dat er maar 993 zijn aangepast, dan kan ik snel het idee krijgen dat er bij 7 producten iets verkeerd is gegaan.
Dus... wat vinden jullie? Is situatie 1 beter of situatie 2?
Gewijzigd op 30/05/2013 00:57:18 door Ozzie PHP
Hoi Ozzie, ik zou meer baad hebben bij situatie een. Omdat ik specifiek wil weten wat de update query heeft gedaan. Als ik het aantal producten wil weten wat aan een waarde voldoet zou ik hier een nieuwe query voor gebruiken. Zeker omdat ik niet direct zou weten waarom ik situatie 2 zou willen weten tijdens een update.
In feite zeg je, verander overal veld "foo" in waarde "bar". Dat bij een paar rijen het veld "foo" toevallig al op "bar" staat, neemt niet weg dat deze rijen ook op de juiste waarde moeten worden gezet. Alleen toevallig staan ze dat al. Maar ze worden wel door de query gecontroleerd en dan blijkt dat er niks hoeft te gebeuren. Mja, beetje vaar. Maar de meest gebruikelijke situatie, is dat dan situatie 1 (het werkelijk aantal aangepaste rijen)?