wstawianie do dwóch tabel

Odpowiedz Nowy wątek
2011-07-14 17:52
anna92
0

Witam,

Mam dwie tabele:

  • klienci
  • naprawy

Mam również dwa modele, do obsługi odpowiednich tabel (klienci, naprawy).
I teraz mam taką sytuację, że:

  • klient wypełnia formularz (swoje dane osobowe, które wskoczą do tabeli klienci),
  • oraz dane dotyczące naprawy (do tabeli naprawy)
    Jednak do tabeli naprawy musi jeszcze wskoczyć klient_id, aby móc powiązać naprawę z konkretnym klientem.

W kodzie wyglądałoby to tak:

    $klient_id = $this->klientci->dodaj_klienta(); // dane pobierane z post'a
    $this->naprawy->dodaj_naprawe( $klient_id ); //pozostałe dane również z post'a

Jak pobrać id klienta, zaraz po jego dodaniu ? Znalazłam taką funkcję mysql_insert_id(), jednak tutaj może dojść do sytuacji, w której w tym samym czasie nastąpi zapytanie.. i co wtedy ?

W ogóle czy w taki sposób można to rozwiązać ? Czy może wykonuje się to inaczej, jeśli tak, to jak ?

Pozdrawiam anna.

E... Nie ma prawa coś stać się w tym samym czasie :] - Patryk27 2011-07-14 18:14
PS: nie robi się spacji przed myślinikiem ;) - Patryk27 2011-07-14 18:15

Pozostało 580 znaków

2011-07-14 18:13
0

Nie wiem jak to w kontekście "codeigniser" (bo jeszcze nie wiem co to ten cogniser) ale właśnie się taką funkcje stosuje więc raczej nie ma takiego problemu w przeciwieństwie do próby zastosowania "SELECT max(id)...." które czasem właśnie sprawia błędy

edytowany 2x, ostatnio: noHuman, 2011-07-14 18:16

Pozostało 580 znaków

2011-07-14 18:19
anna92
0

w dokumentacji pisze tak:

Note: Because mysql_insert_id() acts on the last performed query, be sure to call mysql_insert_id() immediately after the query that generates the value.

więc to nie do końca chyba bezpieczne..!?

Pozostało 580 znaków

2011-07-14 18:50
0

Jest bezpieczne, zwraca zawsze ostatnie id na połączenie jeśli zaraz po "insert" to zrobisz, no chyba że framework albo Ty w kodzie gdzieś po między insert a pobraniem id coś wstawicie, codeigniter powinien mieć w obiekcie odpowiedzi po zapytaniu insert jakieś pole z tym ID,

Szybkie przeglądnięcie googla:

$id = $this->db->call_function('insert_id');  
$this->db->insert_id()
 
edytowany 2x, ostatnio: noHuman, 2011-07-14 18:53

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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