Pole „id” mojej automatycznej tabeli zwiększa się po wstawieniu wiersza. Chcę wstawić wiersz, a następnie uzyskać ten identyfikator.
Zrobiłbym to tak, jak to powiedziałem, ale czy jest sposób, aby to zrobić, nie martwiąc się o czas między wstawieniem wiersza a otrzymaniem identyfikatora?
Wiem, że mogę zapytać bazę danych o wiersz, który pasuje do wprowadzonych informacji, ale jest duża zmiana, będą duplikaty, a jedyną różnicą jest identyfikator.
mysql_insert_id() will convert the return type of the native MySQL C API function mysql_insert_id() to a type of long (named int in PHP). If your AUTO_INCREMENT column has a column type of BIGINT (64 bits) the conversion may result in an incorrect value. Instead, use the internal MySQL SQL function LAST_INSERT_ID() in an SQL query. For more information about PHP's maximum integer values, please see the integer documentation.
\Funkcja MySQL
LAST_INSERT_ID()
robi dokładnie to, czego potrzebujesz: pobiera identyfikator, który został wstawiony podczas tej sesji . Jest więc bezpieczny w użyciu, nawet jeśli istnieją inne procesy (na przykład inne osoby wywołujące dokładnie ten sam skrypt), wstawiające wartości do tej samej tabeli.Funkcja PHP działa
mysql_insert_id()
tak samo jak wywoływanie zaSELECT LAST_INSERT_ID()
pomocąmysql_query()
.źródło
echo mysql_insert_id(); mysql_query('SELECT LAST_INSERT_ID(600)'); echo mysql_insert_id(); mysql_query('SELECT LAST_INSERT_ID()');
Drugimysql_insert_id()
nie odzwierciedla 600, gdziemysql_query('SELECT LAST_INSERT_ID()')
będzie. Aby uzyskaćmysql_insert_id()
odzwierciedlenie zmiany, musisz najpierw wstawić lub zaktualizować (co może wpłynąć na 0 wierszy). Zobacz ostatni akapit: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-idJeśli chodzi o stronę PHP, mysql_insert_id jest teraz przestarzały i musimy używać PDO. Aby to zrobić za pomocą PDO, wykonaj następujące czynności:
źródło
Jak powiedział @NaturalBornCamper, mysql_insert_id jest teraz przestarzały i nie należy go używać. Dostępne są teraz opcje używania PDO lub mysqli. NaturalBornCamper wyjaśnił PDO w swojej odpowiedzi, więc pokażę, jak to zrobić za pomocą MySQLi ( MySQL Improved ) za pomocą mysqli_insert_id .
Sprawdź dokumentację PHP, aby uzyskać więcej przykładów: http://php.net/manual/en/mysqli.insert-id.php
źródło
Chcę tylko dodać mały szczegół dotyczący
lastInsertId()
;Wprowadzając więcej niż jeden wiersz na raz, nie zwraca ostatniego Id , ale pierwszy Id kolekcji ostatnich wstawek.
Rozważ następujący przykład
To, co się tutaj dzieje, polega na tym, że pcham
my_table
dwa nowe rzędy. Identyfikator tabeli to auto-inkrement. Tutaj, dla tego samego użytkownika, dodaję dwa wiersze z innymvarNumb
.Wartość echa na końcu będzie równa identyfikatorowi wiersza gdzie
varNumb=1
, co oznacza nie identyfikator ostatniego wiersza, ale identyfikator pierwszego wiersza dodanego w ostatnim żądaniu.źródło
Przykład.
Wiersz kodu
$course_id = $query_new->insert_id;
wyświetli identyfikator ostatniego wstawionego wiersza. Mam nadzieję że to pomoże.źródło
Spróbuj tak, aby uzyskać odpowiedź:
Spójrz na następujące linki:
http://www.w3schools.com/php/func_mysqli_insert_id.asp
http://php.net/manual/en/function.mysql-insert-id.php
Pamiętaj też, że to rozszerzenie było przestarzałe w PHP 5.5 i usunięte w PHP 7.0
źródło
Znalazłem odpowiedź w powyższym linku http://php.net/manual/en/function.mysql-insert-id.php
Odpowiedź to:
źródło
mysql
odpowiedź, nigdy jej nie używaj.Spróbuj tego ... zadziałało dla mnie!
źródło
Inną możliwą odpowiedzią będzie:
Kiedy zdefiniujesz tabelę, będzie ona zawierała kolumny i dane. Identyfikator kolumny może mieć właściwość AUTO_INCREMENT .
Dzięki tej metodzie nie musisz się martwić o identyfikator , zostanie on utworzony automatycznie .
Na przykład (wzięte z w3schools )
Mam nadzieję, że to będzie komuś pomocne.
Edycja: To tylko część, w której definiujesz sposób generowania automatycznego identyfikatora, aby uzyskać go po utworzeniu, poprzednie odpowiedzi są prawidłowe.
źródło