/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
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



Søg
Reklame
Statistik
Spørgsmål : 177417
Tips : 31962
Nyheder : 719565
Indlæg : 6407870
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste