| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | PHP og ROLLBACK/COMMIT Fra : Mads Aggerholm | 
  Dato :  15-01-09 20:04 |  
  |   
            Hej folkens!
 
 Jeg er ved at lave noget i PHP og MySQL.
 I det her tilfælde vil jeg flytte data fra en tabel over i en anden.
 Det gør jeg ved at INSERT'e data fra tabel 1 til tabel 2, og efterfølgende 
 slette pågældende record i tabel 1.
 
 Det er jo sådan set nemt nok, men i det øjeblik jeg gemmer data i tabel nr. 
 2, ligger de jo der! Hvis så sletning på tabel 1 af en eller anden grund går 
 galt, så ligger sagerne jo begge steder!
 
 Jeg har søgt rundt på nettet og fundet noget med "START TRANSACTION", 
 "ROLLBACK" og "COMMIT". Problemet er bare, at det virker ikke!
 (Jeg har mistanke til noget der hedder "AUTOCOMMIT", men jeg ved ikke 
 hvordan man slår det fra i PHP.
 
 Min kode ser sådan her ud:
 
 $rs1 = mysql_query("START TRANSACTION");
 $strsql = "INSERT INTO tabel1 (`name`, `postnr`) SELECT `name`, `postnr` 
 FROM `tabel2` WHERE `name`= '$nametx'";
 $result = mysql_query($strsql);
 if ($result==false)
 {
    $rsx = mysql_query("ROLLBACK");
    echo "DATABASE-FEJL 01!";
 }
 else
 {
    $strsql = "DELETE FROM `tabel2` WHERE `name` = '$nametx'";
    $result = mysql_query($strsql);
    if ($result==false)
    {
       $rsx = mysql_query("ROLLBACK");
       echo "DATABASE-FEJL 02!";
    }
    else
    {
       $rsx = mysql_query("COMMIT");
       echo "RECORD FLYTTET!";
    }
 }
 
 Hvis jeg med vilje laver en fejl i DELETE-sætningen, (skriver f.eks. 
 "xabel2" i stedet for "tabel2" kommer den fint nok ud og skriver 
 "DATABASE-FEJL 02!" - men der bliver ikke rullet tilbage! Tingene ligger 
 stadig begge steder!
 
 Som jeg skriver har jeg mistanke til noget autocommit.
 
 Er det problemet? Og hvordan slår man det i givet fald fra i PHP?
 Og hvis det ikke er - hvad er så??
 
 Venlig hilsen
 Mads Aggerholm
  
 
  
            
             |   |   
            
        
 
            
         
           Arne Vajhøj (15-01-2009) 
         
	
            | Kommentar Fra : Arne Vajhøj | 
  Dato :  15-01-09 23:21 |  
  |   
            Mads Aggerholm wrote:
 > Hej folkens!
 > 
 > Jeg er ved at lave noget i PHP og MySQL.
 > I det her tilfælde vil jeg flytte data fra en tabel over i en anden.
 > Det gør jeg ved at INSERT'e data fra tabel 1 til tabel 2, og 
 > efterfølgende slette pågældende record i tabel 1.
 > 
 > Det er jo sådan set nemt nok, men i det øjeblik jeg gemmer data i tabel 
 > nr. 2, ligger de jo der! Hvis så sletning på tabel 1 af en eller anden 
 > grund går galt, så ligger sagerne jo begge steder!
 > 
 > Jeg har søgt rundt på nettet og fundet noget med "START TRANSACTION", 
 > "ROLLBACK" og "COMMIT". Problemet er bare, at det virker ikke!
 > (Jeg har mistanke til noget der hedder "AUTOCOMMIT", men jeg ved ikke 
 > hvordan man slår det fra i PHP.
 
 > Hvis jeg med vilje laver en fejl i DELETE-sætningen, (skriver f.eks. 
 > "xabel2" i stedet for "tabel2" kommer den fint nok ud og skriver 
 > "DATABASE-FEJL 02!" - men der bliver ikke rullet tilbage! Tingene ligger 
 > stadig begge steder!
 > 
 > Som jeg skriver har jeg mistanke til noget autocommit.
 > 
 > Er det problemet? Og hvordan slår man det i givet fald fra i PHP?
 > Og hvis det ikke er - hvad er så??
 
 Første spørgsmål er: bruger du MyISAM eller InnoDB tabeller.
 
 MyISAM tabeller understøtter ikke transaktioner, så bruger du
 MyISAM, så er du strandet inden du er kommet igang.
 
 Arne
  
            
             |   |   
            
        
 
            
         
           mads.aggerholm@gmail~ (16-01-2009) 
         
	
            | Kommentar Fra : mads.aggerholm@gmail~ | 
  Dato :  16-01-09 00:19 |  
  |   
            On 15 Jan., 23:20, Arne Vajhøj <a...@vajhoej.dk> wrote:
 >
 > Første spørgsmål er: bruger du MyISAM eller InnoDB tabeller.
 >
 > MyISAM tabeller understøtter ikke transaktioner, så bruger du
 > MyISAM, så er du strandet inden du er kommet igang.
 >
 > Arne
 
 Hej Arne
 
 Ja, jeg ser nu at jeg kører MyISAM. Det er godt nok noget jeg kan
 ændre når jeg opretter tabellen, bare ikke til InnoDB (!)
 De valgmuligheder jeg har - udover MyISAM - er: MERGE, HEAP, MEMORY og
 ISAM.
 
 Kan det bruges til noget som helst?
 Eller er jeg nødt til at skifte til et webhotel som tilbyder InnoDB?
 
 Mvh
 Mads Aggerholm
  
            
             |   |   
            
        
 
            
         
           Martin (16-01-2009) 
         
	
            | Kommentar Fra : Martin | 
  Dato :  16-01-09 21:57 |  
  |  
 
            mads.aggerholm@gmail.com wrote:
 > On 15 Jan., 23:20, Arne Vajhøj <a...@vajhoej.dk> wrote:
 >> Første spørgsmål er: bruger du MyISAM eller InnoDB tabeller.
 >>
 >> MyISAM tabeller understøtter ikke transaktioner, så bruger du
 >> MyISAM, så er du strandet inden du er kommet igang.
 >>
 >> Arne
 > 
 > Hej Arne
 > 
 > Ja, jeg ser nu at jeg kører MyISAM. Det er godt nok noget jeg kan
 > ændre når jeg opretter tabellen, bare ikke til InnoDB (!)
 > De valgmuligheder jeg har - udover MyISAM - er: MERGE, HEAP, MEMORY og
 > ISAM.
 > 
 > Kan det bruges til noget som helst?
 > Eller er jeg nødt til at skifte til et webhotel som tilbyder InnoDB?
 Du kan ikke bruge transactions (Rollback, commit osv.) i MyISAM, den
 eneste engine du kan bruge dette på i MySQL sammenhæng er innoDB.
 Du kan læse meget mere om de forskellige engines her
 http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html
Merge = Til at sammenlægge 2 tabeller
 Heap og Memory = er hurtige engines, som KUN er i rammen, og vil blive
 fjernet når mysql programmet lukkes
 PS
 Når du skal lege med transactions i PHP, så vil jeg anbefale dig at
 kigge på mysqli funktionerne istedet for mysql funktionerne
 http://se.php.net/mysqli
            
             |   |   
            
        
 
            
         
            Mads Aggerholm (17-01-2009) 
         
	
            | Kommentar Fra : Mads Aggerholm | 
  Dato :  17-01-09 14:03 |  
  |   
            
"Martin" <martin@aarhof.invalid> skrev i meddelelsen 
 news:4970f48f$0$90263$14726298@news.sunsite.dk...
 >
 > PS
 > Når du skal lege med transactions i PHP, så vil jeg anbefale dig at
 > kigge på mysqli funktionerne istedet for mysql funktionerne
 >
 >  http://se.php.net/mysqli
Men så skal man have en udbyder der understøtter mysqli -?
 Venlig hilsen
 Mads Aggerholm 
            
              |   |   
            
        
 
            
         
           Arne Vajhøj (16-01-2009) 
         
	
            | Kommentar Fra : Arne Vajhøj | 
  Dato :  16-01-09 23:42 |  
  |   
            mads.aggerholm@gmail.com wrote:
 > On 15 Jan., 23:20, Arne Vajhøj <a...@vajhoej.dk> wrote:
 >> Første spørgsmål er: bruger du MyISAM eller InnoDB tabeller.
 >>
 >> MyISAM tabeller understøtter ikke transaktioner, så bruger du
 >> MyISAM, så er du strandet inden du er kommet igang.
 > Ja, jeg ser nu at jeg kører MyISAM. Det er godt nok noget jeg kan
 > ændre når jeg opretter tabellen, bare ikke til InnoDB (!)
 > De valgmuligheder jeg har - udover MyISAM - er: MERGE, HEAP, MEMORY og
 > ISAM.
 > 
 > Kan det bruges til noget som helst?
 > Eller er jeg nødt til at skifte til et webhotel som tilbyder InnoDB?
 
 Du skal bruge InnoDB for at få transaktioner.
 
 Du kunne evt. starte med at spørge dit nuværende web hotel om
 InnoDB adgang.
 
 Ellers skal du ud og lede efter et web hotel med InnoDB support.
 Lidt hurtig surf viser at azero.dk har det, men der er sikkert
 også andre.
 
 Arne
  
            
             |   |   
            
        
 
            
         
            Arne Vajhøj (17-01-2009) 
         
	
            | Kommentar Fra : Arne Vajhøj | 
  Dato :  17-01-09 02:14 |  
  |   
            Arne Vajhøj wrote:
 > mads.aggerholm@gmail.com wrote:
 >> On 15 Jan., 23:20, Arne Vajhøj <a...@vajhoej.dk> wrote:
 >>> Første spørgsmål er: bruger du MyISAM eller InnoDB tabeller.
 >>>
 >>> MyISAM tabeller understøtter ikke transaktioner, så bruger du
 >>> MyISAM, så er du strandet inden du er kommet igang.
 >> Ja, jeg ser nu at jeg kører MyISAM. Det er godt nok noget jeg kan
 >> ændre når jeg opretter tabellen, bare ikke til InnoDB (!)
 >> De valgmuligheder jeg har - udover MyISAM - er: MERGE, HEAP, MEMORY og
 >> ISAM.
 >>
 >> Kan det bruges til noget som helst?
 >> Eller er jeg nødt til at skifte til et webhotel som tilbyder InnoDB?
 > 
 > Du skal bruge InnoDB for at få transaktioner.
 > 
 > Du kunne evt. starte med at spørge dit nuværende web hotel om
 > InnoDB adgang.
 > 
 > Ellers skal du ud og lede efter et web hotel med InnoDB support.
 > Lidt hurtig surf viser at azero.dk har det, men der er sikkert
 > også andre.
 
 Et hurtigt check viser at netplads.dk også understøtter InnoDB.
 
 Og det er til den klassiske pris af 9 kr./måned.
 
 Arne
  
            
             |   |   
            
        
 
            
         
             Mads Aggerholm (17-01-2009) 
         
	
            | Kommentar Fra : Mads Aggerholm | 
  Dato :  17-01-09 14:02 |  
  |   
            
 
 "Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen 
 news:497130ec$0$90270$14726298@news.sunsite.dk...
 
 >> Du kunne evt. starte med at spørge dit nuværende web hotel om
 >> InnoDB adgang.
 >>
 
 Det har de ikke! De siger at "billige udbydere (som dem) ikke har sådan 
 noget".
 
 >> Ellers skal du ud og lede efter et web hotel med InnoDB support.
 >> Lidt hurtig surf viser at azero.dk har det, men der er sikkert
 >> også andre.
 >
 > Et hurtigt check viser at netplads.dk også understøtter InnoDB.
 >
 > Og det er til den klassiske pris af 9 kr./måned.
 >
 > Arne
 
 Så er det nok sagen!
 Men hvordan fandt du ud af, at netplads understøtter innoDB?
 De skriver ikke noget om det på deres hjemmeside, og google finder heller 
 ikke noget med netplads og innoDB?
 
 Venlig hilsen
 Mads Aggerholm
  
 
  
            
             |   |   
            
        
 
            
         
              Arne Vajhøj (17-01-2009) 
         
	
            | Kommentar Fra : Arne Vajhøj | 
  Dato :  17-01-09 15:04 |  
  |  
 
            Mads Aggerholm wrote:
 > "Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen 
 > news:497130ec$0$90270$14726298@news.sunsite.dk...
 >>> Du kunne evt. starte med at spørge dit nuværende web hotel om
 >>> InnoDB adgang.
 >>>
 > 
 > Det har de ikke! De siger at "billige udbydere (som dem) ikke har sådan 
 > noget".
 Hm. Lad mig gætte de kører også stadig MySQL version tidlig middelalder.
 >>> Ellers skal du ud og lede efter et web hotel med InnoDB support.
 >>> Lidt hurtig surf viser at azero.dk har det, men der er sikkert
 >>> også andre.
 >>
 >> Et hurtigt check viser at netplads.dk også understøtter InnoDB.
 >>
 >> Og det er til den klassiske pris af 9 kr./måned.
 > 
 > Så er det nok sagen!
 > Men hvordan fandt du ud af, at netplads understøtter innoDB?
 > De skriver ikke noget om det på deres hjemmeside, og google finder 
 > heller ikke noget med netplads og innoDB?
 Med hans indstilling til teknik var det en mulighed at der var
 support for InnoDB og da jeg er selv kunde der så checkede jeg
 bare om muligheden var der.
  
Men det kunne naturligvis være at du skulle checke om det er
 noget der officielt er der så du kan regne med at det fortsætter
 med at være der.
 Arne
            
              |   |   
            
        
 
            
         
               Martin (18-01-2009) 
         
	
            | Kommentar Fra : Martin | 
  Dato :  18-01-09 19:28 |  
  |   
            Arne Vajhøj wrote:
 > Mads Aggerholm wrote:
 >> "Arne Vajhøj" <arne@vajhoej.dk> skrev i meddelelsen
 >> news:497130ec$0$90270$14726298@news.sunsite.dk...
 >>>> Du kunne evt. starte med at spørge dit nuværende web hotel om
 >>>> InnoDB adgang.
 >>>>
 >>
 >> Det har de ikke! De siger at "billige udbydere (som dem) ikke har
 >> sådan noget".
 > 
 > Hm. Lad mig gætte de kører også stadig MySQL version tidlig middelalder.
 > 
 >>>> Ellers skal du ud og lede efter et web hotel med InnoDB support.
 >>>> Lidt hurtig surf viser at azero.dk har det, men der er sikkert
 >>>> også andre.
 >>>
 >>> Et hurtigt check viser at netplads.dk også understøtter InnoDB.
 >>>
 >>> Og det er til den klassiske pris af 9 kr./måned.
 >>
 >> Så er det nok sagen!
 >> Men hvordan fandt du ud af, at netplads understøtter innoDB?
 >> De skriver ikke noget om det på deres hjemmeside, og google finder
 >> heller ikke noget med netplads og innoDB?
 > 
 > Med hans indstilling til teknik var det en mulighed at der var
 > support for InnoDB og da jeg er selv kunde der så checkede jeg
 > bare om muligheden var der.
 
 Jeg kan ikke være mere enig...
 GratisDNS, MXHotel og Netplads er 3 rigtige lækre services fra Peter.
 Ja, supporten sker i et forum, men det er så sjældent at der er noget
 der skal supporteres, det hele kører bare som det skal.
 
 Men ja, der er "selvfølgelig" adgang til innoDB, enhver host med respekt
 for sig selv burde da have mulighed for RIGTIGE transactions...
 (det virker ihvertfald helt fint hos mig, og mine transactions kommer da
 fint igennem)
 
 PS
 DOG er der ikke mysqli, men derimod er der PDO_Mysql, og ellers er det
 muligt at installer en PEAR addon, fx. MDB2
  
            
             |   |   
            
        
 
            
         
           N/A (16-01-2009) 
         
	
            | Kommentar Fra : N/A | 
  Dato :  16-01-09 21:57 |  
  |   
            
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |