[InnoDB/PHP]Transactions

Pagina: 1
Acties:

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 15:37
Ik wil graag transactions gaan gebruiken met InnoDB. Zou makkelijk moeten zijn:
PHP:
1
2
3
4
5
6
7
8
9
10
<?
mysql_query("SET AUTOCOMMIT=0");
mysql_query("BEGIN");
//rondje fietsen, hier wat in, daar wat in
if (rondje fietsen helemaal gelukt) {
   mysql_query("COMMIT");
} else {
   mysql_query("ROLLBACK");
}
?>

Nu was dat rondje fietsen dus half gelukt en doet ie een rollback. Probleem is nu dat die hele database op slot staat ofzow, alles wordt ineens heel erg sloom in die database.
Iemand een idee hoe dit komt? En ja: die database server heeft wel genoeg RAM en CPU: http://info.jgc.homeip.net

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 15:37
En yupz, het is een deadlock:

Lock wait timeout exceeded; Try restarting transaction

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Moet je niet nog "END;" roepen na je queries?

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 15:37
Ben er al achter. Om met de database te connecten gebruik ik altijd mysql_pconnect. Als ik nou nog es ff de PHP manual goed bekeken had, had ik ook gelezen dat transactions en persistent connections NIET samen gaan. Heb dus ff een p'tje verwijderd uit mn script en het draait super.

BTW: Met begin geef je het begin van een transactie aan, met commit of rollback sluit je em af.

[edit]
Wat ik vergeten ben te melden in de eerste post: aan het eind natuurlijk weer SET AUTOCOMMIT=1, is zo lullig voor mn huidige site die nog nix weet van COMMIT als je dat vergeet...

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op dinsdag 18 december 2001 19:31 schreef _JGC_ het volgende:
BTW: Met begin geef je het begin van een transactie aan, met commit of rollback sluit je em af.
Mja, dat is bij innodb misschien zo, maar bij andere DB's moet je in principe een BEGIN met een END afsluiten bij mijn weten :)

Verwijderd

Bij mijn weten is 'END' een impliciete 'COMMIT'

Verwijderd

Ik heb dit met aandacht gelezen, en heb toch nog een probleempje:

Zodra ik ergens op klik op de pagina, en de pagina dus zeg maar opnieuw wordt geladen, wordt er al een automatische commit uitgevoerd. Is dit een optie die ik uit kan schakelen, of hoe kan ik dit omzeilen?

Met andere woorden, kan ik een transactie langer laten leven dan 1 pagina?

  • WILDEAAP
  • Registratie: Mei 2001
  • Laatst online: 11-08-2021

WILDEAAP

De aap heet Wil...

Dit zou ik ook wel eens willen weten. Weet iemand hier een oplossing voor?

De vos loopt door het bos.


  • xoror
  • Registratie: November 1999
  • Niet online
je kan proberen auto commit uit te zetten.

bij inladen van nieuwe page krijg je niet altijd dezelfde connectie als je vorige page (zelfs niet met pconnect, je heb soort connection pool, welke je eruit krijg weet je niet). Met andere woorden, in princiepe is er dan GEEN commit gegeven. Het is logischer dat hij hem dan (na bepaalde timeout) cancelt. waarom mysql hem commit is mij ook niet duidelijk. je zou eens andere db kunnen proberen.

Mitsubishi Warmtepomp uitlezen/besturen met een ESP32


Verwijderd

Volgens mij ligt het eerder aan PHP, en de manier waarop hij zaken afhandelt. Gewoon rauw in mysql invoeren werkt het allemaal, maar via PHP niet echt. Ik kan natuurlijk alles via postvars bewaren tot hét moment, maar dit is ook niet echt zinvol. De PHP handleiding wordt ik ook niet veel wijzer van...

  • xoror
  • Registratie: November 1999
  • Niet online
Op zaterdag 18 mei 2002 10:21 schreef s991051 het volgende:
Volgens mij ligt het eerder aan PHP, en de manier waarop hij zaken afhandelt. Gewoon rauw in mysql invoeren werkt het allemaal, maar via PHP niet echt. Ik kan natuurlijk alles via postvars bewaren tot hét moment, maar dit is ook niet echt zinvol. De PHP handleiding wordt ik ook niet veel wijzer van...
dat zeg ik toch ook. als je met de hand inklopt in mysql verbreek je je verbinding niet. via php (als je naar andere page submit/gaat wel (zelfs met pconnect), zie post hierboven)

Mitsubishi Warmtepomp uitlezen/besturen met een ESP32


  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
Op zaterdag 18 mei 2002 10:21 schreef s991051 het volgende:
Volgens mij ligt het eerder aan PHP, en de manier waarop hij zaken afhandelt. Gewoon rauw in mysql invoeren werkt het allemaal, maar via PHP niet echt. Ik kan natuurlijk alles via postvars bewaren tot hét moment, maar dit is ook niet echt zinvol. De PHP handleiding wordt ik ook niet veel wijzer van...
waarom is dit niet zinvol zolang het wel werkt?

je kan natuurlijk alles wat je wil mee geven/bewaren tot het moment supreme in een object en dat object in sessie zetten en er aan de andere kant weer uithalen.

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who

Pagina: 1