Я корректен в понимании, что LAST_INSERT_ID mysql () функция не сбрасывает между попытками вставки (как @@, идентификационные данные делают в SQL-сервере)..., что, если сразу предыдущая операция вставки перестала работать, LAST_INSERT_ID () возвратит pk того, чем был pk последней вставки того соединения к какой-либо таблице с первичным ключом автопостепенного увеличения. И если я корректен в этом, разве это не походит примерно на самое отсталое поведение для этой функции, которую можно было придумать? Нет ли никакая функция mysql, которая ведет себя так же к SQL-серверу @@ идентификационные данные? Тот, который возвратит ПУСТОЙ УКАЗАТЕЛЬ, если сразу предыдущая попытка вставки не создаст новой записи? С другой стороны, как каждый знает с уверенностью первичный ключ новой операции вставки?
@@ идентификатор также обычно неверен на сервере sql. Вместо этого вы должны использовать scope_identity ()
.
В MySql last_insert_id () должно быть безопасным для использования, потому что единственный способ вызвать эту функцию после ошибки вставки - это уже правильно отловить и учесть ошибку вставки. В противном случае вы все равно обрабатывали бы команды. Другими словами, last_insert_id () не является вашим механизмом обработки ошибок.
Вы должны сначала проверить, была ли вставка успешной. Если вставка прошла успешно, вы можете положиться на LAST_INSERT_ID ().
изменить: в php:
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
mysql_query('<PUT YOUR INSERT HERE');
if(mysql_affected_rows()>0){
$last_id=mysql_insert_id();
}else{
//panic!
}
?>