- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
$sql = "SELECT MAX(user_id) AS total
FROM " . USERS_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain next user_id information', '', __LINE__, __FILE__, $sql);
}
if ( !($row = $db->sql_fetchrow($result)) )
{
message_die(GENERAL_ERROR, 'Could not obtain next user_id information', '', __LINE__, __FILE__, $sql);
}
$user_id = $row['total'] + 1;
Найдено в phpBB-wap. Перед регистрацией пользователя. $user_id - id регистрирующегося юзера. Похоже, автор не знает про auto_increment
СУБД такие вещи сама должна делать, для того поля auto_increment и существуют.
Кроме того в postgresql есть serial квалификатор similar to the AUTO_INCREMENT property supported by some other databases
Речь об "универсальности" и разработке.
Даже предположив, что существует такая СУБД (а это вполне реально, просто я с ними не знаком), которая не умеет генерировать последовательности автоматически, возникает ужаснейшая ситуация.
Мало того, что мы "универсализируем" код для того, чтобы он работал с некоторой СУБД, которая просто неприменима в нашем проекте, кроме того этот код будет неэффективно работать с теми СУБД, что всё же имеют систему автоматических последовательностей.
Подобные вещи указывают на очень серьёзные просчёты на этапе разработки.
В пхпбб (частично исторически, частично из-за совместимости с другими БД, частично из-за совместимости с другими приложениями) могут быть юзеры с -1 идентификатором.
Как ведет себя в таком случае автоинкримент не знает только полный идиот.
Более того, в тех версиях пхпбб что я смотрел, обработчик ошибок дубля автоинкримента есть, просто постер кода сюда "забыл" "по какой-то причине" его сюда написать.
Если есть два пользователя с одним идентификатором, то зачем он нужен? Это всю идею и строгость базы нарушает. Это даже тогда даже не проблема плохого программирования, а проблема логики с неопределённостями. Без всякого контекста ясно, что это грубая ошибка этапа разработки, вызванная "потугами" универсальности. А дальше её было просто очень дорого исправить.
"на вашем форуме появлялся автологин
вида http://ваш_форум/login.php?username=ваш_ник&password=ваш_ пароль"
Ну да, а чтобы "вспомнить" пароль, теперь достаточно посмотреть в access.log.
P.S. Или не так:
«Вы принесли в базу новый реферер: http://ваш_форум/login.php?username=vasya15&password=1234 5»