Dupla MySQL update - bug???
2010-08-29T10:49:26+02:00
2010-08-29T20:17:30+02:00
2022-08-02T17:15:27+02:00
Laslow
Adott az alábbi PHP kódrészlet:

$sql="select shown from game where game_id=$game_id"; $eredmeny = mysql_query($sql); $row = mysql_fetch_row($eredmeny); print("Előtte:".$row[0]); // pl. kiírja, hogy Előtte:56 print('<SCRIPT LANGUAGE="JavaScript">alert("Növelés előtt.");</SCRIPT>'); $sql2="UPDATE game SET shown=shown+1 WHERE game_id=$game_id"; mysql_query($sql2); $sql="select shown from game where game_id=$game_id"; $eredmeny = mysql_query($sql); $row = mysql_fetch_row($eredmeny); print("Utána:".$row[0]); // pl. kiírja, hogy Utána:57 mysql_close(); exit;

A shown mező típusa int(11), nincs felvéve semmiféle pre/post script az adatbázisban.
A game táblában csak egy megfelelő game_id-jú rekord van (auto_increment és primary key). Egy phpMyAdmin ablakban megnézem a rekord shown mezőjének értékét, majd megfuttatom a PHP kódot. Kiírja az Előtte értékhez azt amit láttam, majd az Utána értékhez az annál egyel nagyobb számot. (Közben leokézom egyszer a felugró alert ablakot.) Ez így tökéletes.

Azonban!

Ha utána megnézem az adatbázist, ott a shown értéke egyel nagyobb mint amit az Utána-hoz írt ki (pl. shown=58)! Azaz egy helyett kettővel növeli a mező értékét.

Ugyanezt az update-et phpMyAdmin-ból futtatva csak egyel növekszik shown étéke, azaz a PHP küldheti be mégegyszer az update-et. (Mivel ott az exit, meg a felugró alert ablakból is csak egy van, tuti biztos csak egyszer fut le ez a kódrészlet.)

Szerintetek mit nézhetek el?
Mutasd a teljes hozzászólást!
hasonló nekem is volt, nálam is kétszer futott le egy update kód pedig benyomtam minden exitet meg debug szöveget. Semmi.

Később jöttem rá, hogy a probléma ott volt, hogy a html-ben benne hagytam egy <img src="#" /> -t, ahova majd később jött volna a feldolgozott adat kiírása stb, és mivel src-je ismét meghívta a php fájlomat ami elnyomott még egy update-t, aminek persze nem láttam a debug szövegeit mert képként vette volna...

Nézz szét a kódodban, lehet hogy ehhez hasonló a problémád.
Vagy javascript/echo helyett file_put_contents() -eket hívj és egy fájlba loggold a dolgokat, ami később meg tudsz nézni.

Esetleg Firebug 'Net' fül - ott látod milyen kérések-válaszok mennek.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd