mysqli_insert_id
не возвращает идентификатор последней строки таблицы. Из docs , it:
... возвращает идентификатор, сгенерированный запросом в таблице со столбцом, имеющим атрибут AUTO_INCREMENT. Если последний запрос не был оператором
blockquote>INSERT
илиUPDATE
или если в измененной таблице нет столбца с атрибутомAUTO_INCREMENT
, эта функция будет возвращать ноль.(Мой акцент)
То есть, если вы должны немедленно запустить после вставку, которая автоматически сгенерировала идентификатор, в том же соединении вы сделал вставку с, он вернет идентификатор, сгенерированный для этой вставки.
Это иллюстрируется примером в документах, связанных выше:
$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)"; $mysqli->query($query); printf ("New Record has id %d.\n", $mysqli->insert_id);
Что ж, если вы хотите поймать его до того, как он достигнет PHP, модуль Apache будет одним из подходов, например mod_cband . Помимо этого, ваш брандмауэр может вам помочь, но я не знаю, подходит ли для этого стандартный Windows.
В остальном обработать это в вашем PHP-коде было бы не так уж плохо. Да, проверка БД требует времени, но все же быстрее, чем сбор и возврат XML.
Реализовать контроль доступа к ресурсам, отслеживать активные сессии и не инициировать тяжелые задачи, пока у конкретного пользователя открыта задача...?