Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dodawanie rekordu
Forum PHP.pl > Forum > Bazy danych > MySQL
anskellig
Witam

Mam dziwny problem. Wydaje mi się, że to prosta sprawa...
Dodaję sobie tradycyjnie rekord:

$zapytanie = mysql_query("INSERT INTO tabela (`id`, `pole1`,`pole2`, `pole3`) VALUES ('','$zmienna1','$zmienna2','$zmienna3');");

Ponieważ pierwsze pole (id) jest autoincrement, więc nie wiem jaka tam wartość została wpisana, a jest mi ona potrzebna.

Da się tą wartość jakoś wydobyć bez kolejnego zapytania odnajdującego ją?

Dzięki za odp.
Pozdrawiam
artega
Jedyny sposób na wydobycie takich informacji to kolejne zapytanie
  1. SELECT LAST_INSERT_ID();

lub napisanie własnej funkcji wstawiającej rekord i pobierającej ID za jednym razem.
ayeo
Możesz po prostu użyć funkcji mysql_insert_id(); Pozdrawiam!
anskellig
Dzięki ayeo. Właśnie tej funkcji mi brakowało smile.gif
szczypior
Cytat(ayeo @ 3.05.2008, 14:55:17 ) *
Możesz po prostu użyć funkcji mysql_insert_id(); Pozdrawiam!


a w przypadku takiego zapytania:
  1. $zapytanie = mysql_query("INSERT INTO tabela (`id`, `pole1`,`pole2`, `pole3`) VALUES ('$zmienna1','$zmienna2','$zmienna3') AND ('$zmienna4','$zmienna5','$zmienna6')";

jak można wyciągnąć id obu rekordów? tą samą funkcją?
piotrooo89
ta funkcja wyciąga ostatnie dodane id a nie przedostatnie i ostatnie. chyba że sie mylę to mnie poprawcie.
szczypior
a można coś w tym stylu zrobić?

  1. SELECT id FROM tabela WHERE (INSERT INTO tabela(pole) VALUES ('cos1'),('cos2'))

To oczywiście nie działa, ale czy da się to zrobić idąc tym tropem?
eai
Przecież możesz to zrobić np:

select id from tabela order by id DESC LIMIT 3;

i w ten sposób masz 3 ostatnio dodane ID.
szczypior
no tak ale chodzi o to żeby ograniczyć ilość zapytań, Twoje rozwiązanie nie jest dobre bo prawie jednocześnie wpisy może dodać np 2 użytkowników i wtedy 3 ostatnie wpisy już nie dotyczą pierwszego użytkownika ;p
eai
Nikt Ci nie doda jeśli zablokujesz najpierw tabele, dodasz dane zwrócisz sobie ID a potem odblokujesz tabele. I nikt nie ma prawa Ci dodać coś w między czasie.

Robisz 4 zapytania:
1.
  1. LOCK TABLES tabela WRITE

2 .
  1. INSERT INTO tabela (`id`, `pole1`,`pole2`, `pole3`) VALUES ('xyz','123','abc')

3.
  1. SELECT id FROM tabela ORDER BY id DESC LIMIT 3 ;

4.
  1. UNLOCK TABLES tabela


Poczytaj: http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.