- 1
- 2
- 3
- 4
- 5
- 6
- 7
...
$query = "INSERT INTO `test`.`users` (`id` ,`email` ,`password` ,`nick` ,`sex` ,`date_birth` ,`about`) VALUES(NULL,'$email','$password','$nick','$sex','$dataBirth','$about')";
$db->query($query);
$query = "SELECT `id` FROM `users` WHERE `email` = '$email' AND `password` = '$password'";
$result = $db->select($query);
...
к слову. а как он правильно определяется? в те времена когда я активно БД мучал (~8-10 лет назад), по другому на чистом SQL было никак.
В данном же случае нужно воспользоваться методом mysql_insert_id интерфейса для взаимодействия с MySQL.
В PHP подобные методы есть во всех (или почти во всех) интерфейсах для взаимодействия с СУБД.
Лучше через мускул...
в нагруженных системах, между этими двумя обращения sequence может измениться сотню раз.
к примеру для postgresql ,
Есть sequence table_id_seq пусть текущее значение в нем 5
идет запрос на вставку
Абстрактный код:
$id = select nextval('table_id_seq'); # id будет равен 6
insert into table(id,name) value($id,$value);
Если следом идет еще один запрос на вставку то он получит уже значение 7, но нам будет уже все равно
я забыл про возможность увеличения sequence при получения значения.
а что будет есть запрос на вставку не пройдет? например, из-за невалидности данных или синтаксической ошибке в запросе. sequence будет делать много "пропусков", что тоже не хорошо.
не лучше ли получать реальный номер ПК уже после вставки?
А то что в базе будет идти 1 а потом сразу 10 id , как мне кажется тоже не является проблемой.
Также по-идее невалидность данных должна быть проверена до вставки , не говоря уж о синтаксической ошибке в запросе, и то что запрос не пройдет является скорее исключением ,а не правилом, так что в общем случае столбец id будет идти у вас дружным слитным и радующим глаз рядом )