insert i pobranie od razu ostaniego rekordu

0

Witam wszystkich
mam taki problem
robie sobie inserta z polami id i name tyle ze pole id jest polem autoicremented
i chcialbym po wstawieniu tego pola od razu poznac jego id

mozna by to zrobic tak

  1. insert
  2. select max(id)
    i by bylo
    ale co gdy wiele osob wstawia caly czas i ten select wyswietli mi jakis inny rekord wstawiony rpzez kogos inengo
    ma ktos jakis pomysl na to ???
0

Szczerze mówiąc, jeśli zachodzi taka konieczność (na przykład przy jednoczestnym wstawianiu rekordu do tabeli master i detail), to lepiej nie robić klucza głównego autoincrement w tabeli master, tylko pobrać kolejną unikalną wartość nowego klucza z generatora dla tej tabeli procedurą przechowywaną, a następnie przypisać go przy insercie jako klucz główny w tabeli master i jednocześnie jako klucz obcy w tabeli detail. To jest najlepszy i najbezpieczniejszy sposób.

0

ale mu skomplikowałeś ;) w dodatku o procedurach wspomniałeś, które nie na wszystkich hostingach działają

więc może tak, przykład:

mysql_query("insert into tabela(pole1,pole2) value (11,'sadasd');
$id = mysql_insert_id();

i w id masz id twojego pola

0

Jeżeli używasz pedofila (PDO) możesz zrobić tak:

$sql = "INSERT INTO xxx TWOJE ADNE"; 
$dbh->query($sql); 
print $dbh->lastInsertId(); 

$dbh->lastInsertId();

Konkretnie tutaj będzie ID.
0

jakbyś chciał to robić nie na kluczach zewnętrznych to możesz to jeszcze zrobić np tak:

w bazie danych dodaj procedurę:

CREATE PROCEDURE `dodaj_rekord`(IN nazwa TEXT, OUT id_pola INTEGER(11))
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
-- dodaj rekord
insert into tabela (nazwa_pola) value (nazwa);

-- pobierz id ostatnio dodanego pola
select last_insert_id()
into id_pola;

-- id pola jest teraz przechowywane w zmiennej wyjciowej id_pola
END$$

w php robisz tak:

mysql_query("call dodaj_rekord(".$nazwa.")");
$id = mysql_fetch_row(mysql_query("select @id_pola"));

//id masz w zmiennej $id[0] , żeby było ładniej możesz sobie dopisać

0

Nie każdy typ bazy danych ma składnię dającą możliwość pobrania wartości pola klucza głównego ostatnio wstawionego rekordu.

0

chyba wszyscy założyli że autor mówi o mysql ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1