[PHP/MySQL] Transactions committen op basis van controle

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TeasingU
  • Registratie: Juni 2001
  • Laatst online: 15-09-2022

TeasingU

I Live Longer

Topicstarter
Ik ben bezig met een project waarbij ik het gebruik van transactions wil gaan gebruiken.
De technische details alsvast maar even:

MySQL 4.1(InnoDB) - PHP 4.3.1 en het wordt getest op een Windows XP Pro NL systeem.
Ik heb verschillende queries van zowel SELECT als UPDATE. Tot nu toe heb ik er 20 maar er
kunnen er nog wel een paar bij komen.

Ik begin de transaction met

code:
1
START TRANSACTION


Dan volgen alle queries en is het de bedoeling dat er een Commit of Rollback gegeven wordt.

Tot nu toe is het me duidelijk hoe dit principe werkt. Echter het probleem zit hem in het volgende:

Om een Rollback te geven moet ik zeker weten dat alle queries gelukt zijn. Nou kan ik voor iedere query de volgende manier gebruiken:

code:
1
2
3
4
if(!$result) {
  // Voer een rollback statement uit.
  ...
}


Wanneer het aantal queries groter wordt lijkt me dit vrij omslachtig. Is hier een snellere/meer efficiente manier voor? Op php.net heb ik al veel gelezen over transactions maar nergens gaan
ze echt in op het controleren van queries om daarna te committen of juist niet.

Op mysql.com staan ook voorbeelden van de commandline interface maar ook daar moet
een gebruiker zelf constateren of een query goed uitgevoerd is of niet.

De improved mysql functions op php.net bieden ook geen uitkomst afgezien van het feit dat
ze in PHP5 verwerkt zijn.

Alle info links etc zijn zeer welkom :)

cd /usr/ports/www/porn make install


Acties:
  • 0 Henk 'm!

Verwijderd

Schrijf dan gewoon een of andere class die alle MySQL gerelateerde dingen afhandelt. Dan kun je bijvoorbeeld het volgende doen:

PHP:
1
2
3
4
5
$db->startTransaction ();
$db->perform ( $query1 );
$db->perform ( $query2 );
// ... etc
$db->endTransaction ();

Na iedere perform kijk je of er een transactie gestart is, en als dat het geval is dan breek je de boel af. Desnoods geef je een parameter mee die aangeeft of er een rollback moet plaatsvinden bij het sluiten van de transaction. Een instantie van zo'n database object moet dan maar bijhouden of dat wel kan.

Het lijkt mij ook dat je deze logica niet overal in je scripts moet willen zetten, dat kun je volgens mij prima in zo'n class stoppen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Misschien gewoon een functie maken, die een query uitvoert, kijkt of ie gelukt is, en daarna meteen een rollback doet? Veel eenvoudiger kan het denk ik niet, maar pin me daar niet op vast, want ik heb zelf nog nooit iets met transactions gedaan in MySQL i.c.m. PHP. :)

Edit: of inderdaad meteen een hele klasse. :P

[ Voor 9% gewijzigd door NMe op 01-05-2005 12:44 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • TeasingU
  • Registratie: Juni 2001
  • Laatst online: 15-09-2022

TeasingU

I Live Longer

Topicstarter
Ja idd een Class zou het kunnen, echter programmeer ik in PHP alleen procedureel. Maar ook met een class moet je dan telkens controleren. Het zou zo moeten zijn dat MySQL een result geeft dat alle queries succesvol uitgevoerd zijn zodat er bij wijze van spreken automatisch een Commit uitgevoerd kan worden.

Ik ga nog even verder zoeken want ik kan me amper voorstellen dat zo'n soort principe niet zou bestaan.

cd /usr/ports/www/porn make install