Oto scenariusz: mam zrobić małą witrynę, w której użytkownik może się zarejestrować, używam tabeli o nazwie użytkownicy z polami

userid int unsigned auto_increment,
name varchar(50),
gender enum('m','f'),
time datetime,
joiningyear int unsigned,
primary key (userid)

Kiedy wprowadzam nowego użytkownika, mam go również zalogować, zapisując zaszyfrowaną formę jego identyfikatora użytkownika jako plik cookie. Problem polega na tym, że jeśli identyfikator użytkownika jest już używany, jest on automatycznie zwiększany o 1, co jest oczywiste. Chciałbym otrzymać tę nową wartość jako wyjście mojego zapytania wstawiającego, bez dodawania kolejnego zapytania, które je pobiera, to ułatwi sprawę.

Obecnie używam dwóch oddzielnych zapytań, jednego sprawdzającego, czy losowo wybrany identyfikator użytkownika jest już zajęty, a drugiego wstawiającego wpis. Insert into users(......) values(...)

Czy można to osiągnąć za pomocą jednego zapytania?

0
geekman 25 wrzesień 2012, 18:05

2 odpowiedzi

Najlepsza odpowiedź

W zależności od karty MySql możesz użyć:

mysqli_insert_id lub PDO::lastInsertId. Istnieje również mysql_insert_id, ale opisany:

Korzystanie z tego rozszerzenia jest odradzane. Zamiast tego należy użyć rozszerzenia MySQLi lub PDO_MySQL. Zobacz także MySQL: wybór przewodnika API i powiązane często zadawane pytania, aby uzyskać więcej informacji.

Jeśli używasz dowolnej platformy, powinna ona obsługiwać zwracanie ostatniego wstawionego identyfikatora.

2
hsz 25 wrzesień 2012, 18:09

Mysql_insert_id() poda ostatnio wstawiony identyfikator dla nowego użytkownika. Tak długo, jak nie masz masowego napływu, powinieneś z tego korzystać.

Ostatecznie drugie zapytanie w celu pobrania informacji na podstawie ich danych wejściowych byłoby w porządku, a następnie zapisanie ich w pliku cookie.

0
Jason Brodie 25 wrzesień 2012, 18:10