Kezdőoldal » Számítástechnika » Programozás » PHP-MYSQL, vissza tudom...

PHP-MYSQL, vissza tudom kérdezni az utoljára bevitt adatokat?

Figyelt kérdés

Van egy űrlapom, amin több beviteli mező van, de csak egyet kötelező megadni. Ez a mező nem egyedi azonosító, tehát előfordulhat az adatbázisban, hogy vannak azonos sorok. Tehát erre nem tudok keresni.

Azt szeretném elérni, hogy amikor feldolgozom és elküldöm az űrlapot az adatbázisnak, majd sikeresen be is írta, akkor vissza is olvassa annak a sornak az id-jét (az id automatikusan növelt mező, tehát adatbázisba írás előtt ezt nem tudom). Párhuzamosan többen is használják az űrlapot, ezért olyat nem tudok csinálni, hogy pl. a legutolsó sort kérdezem le, mert közbe egy másik felhasználó is vihet fel adatokat az adatbázisba.

Esetleg használjak session-t, amit eltárolok egy plusz oszlopban, és ez alapján keressem vissza a beírt sort?

Köszi



2014. máj. 25. 11:51
1 2
 1/16 anonim ***** válasza:
Esetleg az ID ne auto increment legyen, hanem generáltasd a kódoddal.
2014. máj. 25. 13:31
Hasznos számodra ez a válasz?
 2/16 anonim ***** válasza:
Megválaszoltad magad a kérdést. A session jó megoldásnak tűnik.
2014. máj. 25. 16:45
Hasznos számodra ez a válasz?
 3/16 anonim ***** válasza:

Ebben a nyomorult MySQL-ben még RETURNING kifejezés sincs, ami az insertből visszaadná az ID értékét, de van helyette

SELECT LAST_INSERT_ID();

lásd: [link]


Ez a LAST_INSERT_ID az adott DB kapcsolatra vonatkozik, tehát a párhuzamos insertek nem zavarnak be neki. Ez tűnik a legelegánsabb megoldásnak.

2014. máj. 25. 20:13
Hasznos számodra ez a válasz?
 4/16 A kérdező kommentje:

Néztem én is a last_insert_id-t, de manual szerint elavult.


Találtam egy másik megoldást:

SELECT id FROM tabla ORDER BY reg_date DESC LIMIT 1


Ezt közvetlenül adatbázisba írás után használom.

Így elvileg nem akadhatok össze másik felhasználóval?

Tehát ha egyszerre küldjük el az űrlapot, akkor is először az egyikünk insert-je és select-je hajtódik végre? Vagy előfordulhat, hogy mindketten beírjuk, és mindketten a legutolsó vesszük ki?


Amúgy a session tényleg egyszerűbbnek tűnik, lehet mégis azzal oldom meg.


Köszi!

2014. máj. 25. 22:29
 5/16 anonim ***** válasza:
Postgresben vannak szekvenciák, aminek ki lehet olvasni az értékét, és megszorításként meg lehet adni a táblának, hogy onnan vegye a következő kulcsot. MySQL-ben nincs ilyen? Mert akkor nem kéne még egy session mezőt felvenni.
2014. máj. 25. 22:51
Hasznos számodra ez a válasz?
 6/16 anonim ***** válasza:

Nem tudom mi az elavult benne, szerintem használd nyugodtan, tekintettel arra, hogy ebben az ótvaros nyomorékban (értsd: MySQL) még szekvenciákat sem lehet normálisan használni, csak auto_increment létezik...

Az általad felvetett megoldás nem jó, az a select már simán visszaadhatja az adatokat, amit egy másik tranzakció közben beinsertált.

Csak ezért letárolni a sessiont szerintem felesleges és pazarló, nem egy szép megoldás.

A legjobb megoldás persze az, ha PostgreSQL-re váltasz, ami egy tényleg igen jó adatbáziskezelő, ellentétben a szutyok MySQL-lel. Postgresben van egyrészt szekvencia, másrészt az INSERT utasításhoz lehet RETURNING-et írni, ami visszaadja, hogy milyen érték íródott a táblába...

2014. máj. 25. 23:46
Hasznos számodra ez a válasz?
 7/16 anonim ***** válasza:
#6 Van egy olyan érzésem hogy nem a MySQL a kedvenc adatbázisod... :)
2014. máj. 26. 15:07
Hasznos számodra ez a válasz?
 8/16 anonim ***** válasza:
Jól sejted. :)
2014. máj. 26. 18:38
Hasznos számodra ez a válasz?
 9/16 anonim ***** válasza:
A PG-ben meg nincs ROLLUP és insert set. Szóval egyik se tökéletes. :-(
2014. máj. 26. 19:25
Hasznos számodra ez a válasz?
 10/16 anonim ***** válasza:

rollup helyett van WITH pl, ami sokkal univerzálisabb, lásd például itt:

[link]

az insert...set-nek meg én nem sok értelmét látom...

2014. máj. 26. 21:13
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!