Portál AbcLinuxu, 25. dubna 2024 01:09


Dotaz: zistenie auto increment pri zápise riadku

8.7.2011 22:18 adrinko | skóre: 22
zistenie auto increment pri zápise riadku
Přečteno: 427×
Odpovědět | Admin
ahojte, prosím o radu s týmto. zapisujem riadok do tabuľky, kde je stĺpec id s auto increment. No a ja by som potreboval po zápise riadku hneď zistiť toto id tohto záznamu, aby som ho mohol do inej tabuľky uložiť do iného stĺpca a takto ich "previazať", t.j. aby som neskôr hneď pri pohľade to druhej tabuľky vedel, ku ktorému záznamu z prvej tabuľky sa viaže. ako sa toto robí?

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.7.2011 22:19 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: zistenie auto increment pri zápise riadku
Odpovědět | | Sbalit | Link | Blokovat | Admin
ešte upresnenie: jedná sa o mysql, php
8.7.2011 22:51 Ragzid | skóre: 24 | blog: Pivní koutek | Liberec-Brno
Rozbalit Rozbalit vše Re: zistenie auto increment pri zápise riadku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pravdepodobne hledas funkci mysql_insert_id().
8.7.2011 23:08 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: zistenie auto increment pri zápise riadku
ďakujem pekne, vyzerá to nádejne. ešte otázočka: ak náhodou pracujú dva php skripty v rovnakom čase a insertujú do db a náhodou nastane situácia, že skript A.php insertuje, hneď za ním insertuje skript B.php a následne v skripte A.php použijem tú funkciu, tak tá mi vyhodí posledné číslo insertu z A.php alebo posledné aktuálne insertované údaje (t.j. ten riadok, ktorý tam insertoval B.php)? teoreticky by niečo podobné mohlo nastať, tak sa preto pýtam. vďaka.

pavlix avatar 9.7.2011 03:09 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: zistenie auto increment pri zápise riadku
MySQL nepoužívám, ale mělo by to u všech databází fungovat tak, že hodnota je pro dané spojení, tedy že se ten program při souběhu nerozbije.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
9.7.2011 10:31 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: zistenie auto increment pri zápise riadku
mysql_insert_id() je funkce která vrací poslední ID pro dané spojení, ale je tam ale:
  • Pokud je sloupec BIGINT a je to 32bit systém (PHP), tak větší hodnoty mohou být problém a nemusí být vráceny korektně. Zjíste pomocí PHP_INT_SIZE, 4 = max INT (NE! unsigned), 8 = Mmax BIGINT (NE! unsigned)) případně pomocí PHP_INT_MAX. V poznámce je to napsáno
  • Funguje to ale nesmíte „sdílet“ spojení. Pokud se připojíte pomocí mysql_pconnect(), tak to nemůžete používat, protože to pak bude dělat přesně to na co se ptáte - bude to vždy to ID které bylo vloženo pomocí SQL dotazu s libovolné stránky používající stejné přihlašovací údaje.
Používáte-li mysqli, tak tam pconnect() není - o jeden problém méně.
A fce mysqli::mysqli_insert_id() vrací int, ale pokud je to mimo jeho rozsah vrací to jako string, což má dvojí dopad na 32bit.
  • Lze to kdykoliv v pohodě použít pro další SQL dotaz
  • Nelze s tím v pohodě pracovat v PHP, lze to kontolovat jen pomocí is_numeric(), ne pomocí is_int() a lze s tím provádět matematické operace max do hodnoty cca. 99 999 999 999 999 což je zaručených 14 platných číslic (obvykle je to 15 číslic) pro reálnou hodnotu, na kterou se typ INT automaticky převede (což je méně než BIGINT max).
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
9.7.2011 11:38 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: zistenie auto increment pri zápise riadku
veľmi pekne všetkým ďakujem za vyčerpávajúce odpovede. Obrovské matematické operácie s tým nebudem vykonávať, mne zatiaľ plne postačuje zistenie auto increment hodnoty a toto som si práve odskúšal pre int do 2147483647 aj bigint do 9223372036854775807 a vracia mi to správne čísla, čomu som rád. vďaka vám všetkým ešte raz.
Řešení 1× (Ragzid)
9.7.2011 10:39 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: zistenie auto increment pri zápise riadku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud chcete místo PHP použít přímo MySQL funkci, podívejte se na LAST_INSERT_ID(). Připomínám, že funguje také v rámci jednoho spojení, takže si dejte pozor na to, abyste mezi INSERTem a dotazem spojení neuzavřel a neotevřel nové, nebo nevytáhl nové spojení z poolu apod.

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.