Portál AbcLinuxu, 14. května 2025 04:31

Dotaz: Jak zjistit id řádku po update v php

19.4.2012 00:42 Jura
Jak zjistit id řádku po update v php
Přečteno: 643×
Odpovědět | Admin
Ahoj, poradíte prosím jak získat id?
tabulka 'reg' má sloupce id, temp a email

$stmt = $pdo->prepare('UPDATE `reg` SET temp = ? WHERE email = ?');
$stmt->execute(array($temp, $email));
a potřeboval bych nějak po provedení tohoto dotazu vrátit id toho řádku ve kterém se ten update provedl. Děkuji
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Marián Oravec avatar 19.4.2012 07:50 Marián Oravec | skóre: 22 | Nitra
Rozbalit Rozbalit vše Re: Jak zjistit id řádku po update v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
Najskôr zistiť id pomocou SELECT `id` FROM `reg` WHERE email = ?. A potom zmeniť temp pomocou UPDATE `reg` SET temp = ? WHERE id = ?.
Mám rád elektro, ale vypočujem si aj iné...
19.4.2012 08:49 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Jak zjistit id řádku po update v php
V tom případě je ale potřeba použít SELECT FOR UPDATE. Jinak se může záznam mezi SELECTem a UPDATEm nekontrolovaně změnit a UPDATE pak aktualizuje špatný záznam.
19.4.2012 11:20 Jura
Rozbalit Rozbalit vše Re: Jak zjistit id řádku po update v php
V tom případě je ale potřeba použít SELECT FOR UPDATE.
Jak to myslíte? nic nemůžu kolm toho najít.. díky
19.4.2012 11:30 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Jak zjistit id řádku po update v php
SELECT FOR UPDATE zamkne příslušné řádky, takže je jiná transakce nemůže měnit. Když řádky nezamknete, může při souběhu transakcí dojít ke změně jiných dat, než jste čekal.
Transakce 1                                                | Transakce 2
SELECT id FROM table WHERE email = 'franta@novak.cz';      |
-- id = 1                                                  |
                                                           |
                                                           | UPDATE table SET email = 'hugo@boss.cz' WHERE id = 1;
                                                           |
UPDATE table SET temp = 123 WHERE id = 1;                  |
V transakci 1 jste tedy změnil záznam s e-mailem hugo@boss.cz, přitom jste chtěl změnit záznam s e-mailem franta@novak.cz.
19.4.2012 13:17 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: Jak zjistit id řádku po update v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud používáš postgresql, můžeš udělat: UPDATE `reg` SET temp = ? WHERE email = ?

V mysql můžeš UPDATE `reg` SET id = @id := id, temp = ? WHERE email = ? a pak id zjistit SELECT @id.

Portabilní verzi je přes zamykání (tzn. select id where .... for update a pak teprv updatnout dle id), jak píší předřečníci.
19.4.2012 13:40 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Jak zjistit id řádku po update v php
Pokud používáš postgresql, můžeš udělat: UPDATE `reg` SET temp = ? WHERE email = ?
Předpokládám, že bylo myšleno
UPDATE `reg` SET temp = ? WHERE email = ? RETURNING id;
19.4.2012 23:38 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: Jak zjistit id řádku po update v php
jo, jo, to returning mi nějak zmizelo...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.