2012-04-29 10 views
5

Zastanawiam się, jakie jest najlepsze rozwiązanie, aby uzyskać ostatni wstawiony identyfikator po zapytaniu mysql?Najlepszym sposobem znalezienia ostatniego wstawionego identyfikatora w mysql przy użyciu php

Znalazłem następujące rozwiązania:

<?php 
function get_current_insert_id($table) 
{ 
    $q = "SELECT LAST_INSERT_ID() FROM $table"; 
    return mysql_num_rows(mysql_query($q)) + 1; 
} 
?> 

lub nawet przy użyciu mysql_insert_id funkcji php, ale widocznie ta funkcja nie będzie działać dobrze z bigint (to jest to co używam na polu ID) i jeśli istnieje wiele kolejnych zapytań sql może być niewiarygodne.

Czy ktoś może dostarczyć niezawodne i szybkie rozwiązanie, aby zrealizować to zadanie?

+1

To nieprawidłowe użycie funkcji LAST_INSERT_ID(). Odzyskasz go jak normalną kolumnę. mysql_num_rows() zawsze będzie dla tego zapytania. – Corbin

+0

Znalazłem tę funkcję na php.net, a plakat twierdził, że ta funkcja rozwiązuje wszystkie problemy spowodowane przez 'mysql_insert_id'! –

+1

-1 za zadanie pytania zamiast przeczytania instrukcji obsługi –

Odpowiedz

10
+0

Cóż, to jest moje pytanie, w jaki sposób zareagowałoby, gdyby było wiele kolejnych połączeń sql i wiele zapytań sql działających. –

+1

@AhouraGhotbi: ['LAST_INSERT_ID()'] (http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_last-insert-id) jest za połączenie. – eggyal

+0

Myślę, że połączenie z dokumentacją byłoby lepsze niż losowy post na forum bez cytowań (http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id). Ale, jest to poprawne, a notatka mysql_pconnect to dobra uwaga. – Corbin

4

Jeśli wstawić wiele wierszy za pomocą pojedynczego INSERT, LAST_INSERT_ID() zwraca wartość wygenerowaną dla pierwszego wstawionego tylko rzędu. Powodem tego jest umożliwienie łatwego odtworzenia tej samej instrukcji INSERT na innym serwerze.

+3

Jeśli zamierzasz skopiować lub wkleić coś z dokumentacji, powinieneś to zacytować. – Corbin

Powiązane problemy