/ 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
MySQL Transaction der ikke virker!
Fra : Allan Kok


Dato : 02-10-06 16:38

Jeg har denne query:
START TRANSACTION; UPDATE KurvDetail SET Antal = 2 WHERE FirmaID = 1000 AND
ID = 7; UPDATE Kurv SET T_Ialt = 7600, T_moms = 1520, T_IaltDkk = 7600,
T_momsDkk = 1520 WHERE FirmaID = 1000 AND OrdrID = 5; COMMIT;

men jeg får denne fejl:
You have an error in your SQL syntax. Check the manual that corresponds to
your MySQL server version for the right syntax to use near '; UPDATE
KurvDetail SET Antal = 2 WHERE FirmaID = 1000 AND ID =

Hvis jeg smider queryen ind i phpMyAdmin så udføres den som den skal.
Hvorfor kan jeg så ikke fra min application?

MySQL er ver. 4.0.2

mvh
Allan Kok



 
 
Peter Brodersen (02-10-2006)
Kommentar
Fra : Peter Brodersen


Dato : 02-10-06 17:04

On Mon, 2 Oct 2006 17:38:21 +0200, "Allan Kok" <allan.kok@fabel.dk>
wrote:

>Hvis jeg smider queryen ind i phpMyAdmin så udføres den som den skal.
>Hvorfor kan jeg så ikke fra min application?
>
>MySQL er ver. 4.0.2

phpMyAdmin sørger (ligesom kommandolinjeklienten) selv for at opdele
dine forespørgsler og sende dem én ad gangen.

Reelt skal du sende tre forspørgsler:

START TRANSACTION

UPDATE KurvDetail SET Antal = 2 WHERE FirmaID = 1000 AND
ID = 7; UPDATE Kurv SET T_Ialt = 7600, T_moms = 1520, T_IaltDkk =
7600, T_momsDkk = 1520 WHERE FirmaID = 1000 AND OrdrID = 5

COMMIT

Dem skal du sende én ad gangen med fx mysql_query() eller hvad du nu
benytter af websprog (jeg går ud fra, at du sikker og arbejder med en
php-applikation).

--
- Peter Brodersen
Kendt fra Internet

Allan Kok (02-10-2006)
Kommentar
Fra : Allan Kok


Dato : 02-10-06 19:20


"Peter Brodersen" <usenet2006@ter.dk> skrev i en meddelelse
news:efrddn$u6i$1@news.klen.dk...
> On Mon, 2 Oct 2006 17:38:21 +0200, "Allan Kok" <allan.kok@fabel.dk>
> wrote:
>

> phpMyAdmin sørger (ligesom kommandolinjeklienten) selv for at opdele
> dine forespørgsler og sende dem én ad gangen.
>
> Reelt skal du sende tre forspørgsler:
>
> START TRANSACTION
>
> UPDATE KurvDetail SET Antal = 2 WHERE FirmaID = 1000 AND
> ID = 7; UPDATE Kurv SET T_Ialt = 7600, T_moms = 1520, T_IaltDkk =
> 7600, T_momsDkk = 1520 WHERE FirmaID = 1000 AND OrdrID = 5
>
> COMMIT
>
Til jer begge, det var fejlen. Tak for hjælpen!

Allan



Ulrik Nielsen (02-10-2006)
Kommentar
Fra : Ulrik Nielsen


Dato : 02-10-06 17:09

Allan Kok wrote:
> Jeg har denne query:
> START TRANSACTION; UPDATE KurvDetail SET Antal = 2 WHERE FirmaID = 1000 AND
> ID = 7; UPDATE Kurv SET T_Ialt = 7600, T_moms = 1520, T_IaltDkk = 7600,
> T_momsDkk = 1520 WHERE FirmaID = 1000 AND OrdrID = 5; COMMIT;
>
> men jeg får denne fejl:
> You have an error in your SQL syntax. Check the manual that corresponds to
> your MySQL server version for the right syntax to use near '; UPDATE
> KurvDetail SET Antal = 2 WHERE FirmaID = 1000 AND ID =
>
> Hvis jeg smider queryen ind i phpMyAdmin så udføres den som den skal.
> Hvorfor kan jeg så ikke fra min application?

det er fordi mysql ikke forstår flere samtidige requests (altså requests
adskildt med ";")

du skal lave 3 forespørgsler:

START TRANSACTION
UPDATE KurvDetail SET Antal = 2 WHERE FirmaID = 1000 AND ID = 7; UPDATE
Kurv SET T_Ialt = 7600, T_moms = 1520, T_IaltDkk = 7600, T_momsDkk =
1520 WHERE FirmaID = 1000 AND OrdrID = 5
COMMIT

phpmyadmin er bare så "flink" at den splitter requesten op for dig.


--
ulrik nielsen |
-----------------+---------------------------------------------------
quote or the day | Suspicious pointer corrupted virtual machine
from bofh | http://www.cs.wisc.edu/~ballard/bofh/

Leif Neland (03-10-2006)
Kommentar
Fra : Leif Neland


Dato : 03-10-06 07:46


"Ulrik Nielsen" <un.spam@tiscali.dk> skrev i en meddelelse
news:45213987.5020402@tiscali.dk...
>
> det er fordi mysql ikke forstår flere samtidige requests (altså requests
> adskildt med ";")
>
Det kommer mysql vist til på et tidspunkt; så kan man forvente sqlinjects
som

'update tabel set antal = $form[antal] where id=$id' og brugeren så angiver
antal som
'7;delete from tabel;select * from tabel'

Det gør så at man skal være bedre til at validere sit input.

Men forhåbentlig bliver det til at slå fra for småfuskerne

Leif



Peter Brodersen (03-10-2006)
Kommentar
Fra : Peter Brodersen


Dato : 03-10-06 09:20

On Tue, 3 Oct 2006 08:45:33 +0200, "Leif Neland" <leif@neland.dk>
wrote:

>> det er fordi mysql ikke forstår flere samtidige requests (altså requests
>> adskildt med ";")
>>
>Det kommer mysql vist til på et tidspunkt;

Hm, forhåbentligt da ikke? Det vil bare skabe mere forvirring, end der
er i forvejen er angående hvad hhv. klienten og serveren tager sig af.

I forhold til det returnerede resultatsæt kommer det nok også til at
forekomme forvirrende.

--
- Peter Brodersen
Kendt fra Internet

Michael Zedeler (03-10-2006)
Kommentar
Fra : Michael Zedeler


Dato : 03-10-06 18:55

Leif Neland wrote:
> "Ulrik Nielsen" <un.spam@tiscali.dk> skrev i en meddelelse
> news:45213987.5020402@tiscali.dk...
>
>>det er fordi mysql ikke forstår flere samtidige requests (altså requests
>>adskildt med ";")
>
> Det kommer mysql vist til på et tidspunkt; så kan man forvente sqlinjects
> som
>
> 'update tabel set antal = $form[antal] where id=$id' og brugeren så angiver
> antal som
> '7;delete from tabel;select * from tabel'

Man kan jo allerede idag lave SQL-injection-angreb på mysql, så det
ændrer ikke meget at der kommer en ny type misbrugsmuligheder - begge
undgåes ved at validere input korrekt.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste