Stomme vraag, maar ik kan er nergens een eenduidig antwoord op vinden.
Ik heb een (vrij triviaal) stukje functionaliteit toegevoegd aan een vrij ouderwets stukje PHP-code dat gebruikt maakt van een vrij dunne wrappe om de standaard mysql_-functies van PHP. (Dus geen mysqli/pear/pdo/etc).
Nu wou ik dat triviale stukje code van mij graag laten werken dmv. een transactie.
Daartoe heb ik simpelweg het volgende gedaan: eerst doe ik simpelweg "START TRANSACTION;" als query (dus eigenlijk gewoon mysql_query("START TRANSACTION;");). Vervolgens doe ik wat ik moet doen en doe ik vervolgens op dezelfde manier een COMMIT of ROLLBACK.
Alleen gebruikt PHP voor zover ik weet een pool voor haar connecties.
Wat nou als door een of ander kosmisch toeval het volgende gebeurt:
1. 'mijn' apachethread wordt uitgescheduled tussen twee queries in midden in de transactie.
2. een andere wordt ingescheduled en krijgt van de pool 'mijn' SQL-connectie die toch niets aan het doen was en voert een ongerelateerde update/insert query uit.
3. 'mijn' thread krijgt de CPU weer en gaat verder. Er gaat iets mis en mijn thread doet een rollback.
Is de wijziging van de andere thread dan ook ongedaan gemaakt?
PHP is zich niet bewust van de transactie, PHP fungeert in dit geval namelijk enkel als doorgeefluik.
Concreet mijn vragen dus:
- recyclet PHP een mysql_connectie op een dergelijke manier?
- zo ja, houdt het rekening met het openstaan van een transactie somehow?
De manier van werken waarop ik het toevallig ook doe kom ik veelvuldig als advies tegen op internet als ik google, maar nergens uit officiele kanalen dus ik vertrouw er niet op dat het veilig is omdat een boel PHP-programmeurs er niet over nagedacht heeft.
Ik heb een (vrij triviaal) stukje functionaliteit toegevoegd aan een vrij ouderwets stukje PHP-code dat gebruikt maakt van een vrij dunne wrappe om de standaard mysql_-functies van PHP. (Dus geen mysqli/pear/pdo/etc).
Nu wou ik dat triviale stukje code van mij graag laten werken dmv. een transactie.
Daartoe heb ik simpelweg het volgende gedaan: eerst doe ik simpelweg "START TRANSACTION;" als query (dus eigenlijk gewoon mysql_query("START TRANSACTION;");). Vervolgens doe ik wat ik moet doen en doe ik vervolgens op dezelfde manier een COMMIT of ROLLBACK.
Alleen gebruikt PHP voor zover ik weet een pool voor haar connecties.
Wat nou als door een of ander kosmisch toeval het volgende gebeurt:
1. 'mijn' apachethread wordt uitgescheduled tussen twee queries in midden in de transactie.
2. een andere wordt ingescheduled en krijgt van de pool 'mijn' SQL-connectie die toch niets aan het doen was en voert een ongerelateerde update/insert query uit.
3. 'mijn' thread krijgt de CPU weer en gaat verder. Er gaat iets mis en mijn thread doet een rollback.
Is de wijziging van de andere thread dan ook ongedaan gemaakt?
PHP is zich niet bewust van de transactie, PHP fungeert in dit geval namelijk enkel als doorgeefluik.
Concreet mijn vragen dus:
- recyclet PHP een mysql_connectie op een dergelijke manier?
- zo ja, houdt het rekening met het openstaan van een transactie somehow?
De manier van werken waarop ik het toevallig ook doe kom ik veelvuldig als advies tegen op internet als ik google, maar nergens uit officiele kanalen dus ik vertrouw er niet op dat het veilig is omdat een boel PHP-programmeurs er niet over nagedacht heeft.