Mam zapytanie wstawiające (aktywny styl rekordu) używane do wstawiania pól formularza do tabeli MySQL. Chcę uzyskać ostatni automatycznie zwiększany identyfikator operacji wstawiania jako wartość zwracaną przez moje zapytanie, ale mam z nim pewne problemy.
Wewnątrz kontrolera:
function add_post(){
$post_data = array(
'id' => '',
'user_id' => '11330',
'content' => $this->input->post('poster_textarea'),
'date_time' => date("Y-m-d H:i:s"),
'status' => '1'
);
return $this->blog_model->add_post($post_data);
}
Model wewnętrzny:
function add_post($post_data){
$this->db->trans_start();
$this->db->insert('posts',$post_data);
$this->db->trans_complete();
return $this->db->insert_id();
}
Nic nie dostaję jako zwrot add_post w modelu
mysql
codeigniter
Afghan Dev
źródło
źródło
db->insert_id()
wracafalse
po adb->trans_complete()
. Upewnij się, że otrzymałeś jeinsert_id()
przed zakończeniem transakcji.Odpowiedzi:
Spróbuj tego
W przypadku wielu wkładek możesz użyć
źródło
Transakcja nie jest tutaj potrzebna, to powinno wystarczyć:
źródło
źródło
Z dokumentacji :
Dlatego możesz użyć czegoś takiego:
źródło
ponieważ zainicjowałeś transakcję po wprowadzeniu danych, więc najpierw sprawdź, czy transakcja została zakończona, czy nie. po rozpoczęciu transakcji należy ją zatwierdzić lub wycofać zgodnie ze statusem transakcji;
w powyższym potwierdziliśmy dane dotyczące udanej transakcji, nawet jeśli otrzymasz sygnaturę czasową
źródło
Aby zakończyć ten temat: Jeśli konfigurujesz tabelę z kluczem podstawowym i automatyczną inkrementacją, możesz pominąć proces ręcznego zwiększania identyfikatora.
Sprawdź ten przykład
Teraz możesz wstawiać wiersze
źródło
źródło
Używając sterownika mysqli PHP, nie możesz pobrać insert_id po zatwierdzeniu.
Prawdziwe rozwiązanie jest takie:
Źródło struktury kodu: https://codeigniter.com/user_guide/database/transactions.html#running-transactions-manually
źródło
Musisz użyć
$lastId = $this->db->insert_id();
źródło