2014-01-19 6 views
2

В базе данных автоматически создается идентификатор для этой строки. Если INSERT выполняется между выполнением в этом коде и SELECT, я вернусь неверный идентификатор. Есть ли лучшая альтернатива для получения идентификатора и гарантии его будет из строки, которую я вставил. Я понимаю, что эти два заявления будут происходить очень близко друг к другу, но я все равно хотел бы знать, есть ли лучший способ сделать это.Получить идентификатор последней вставленной строки mysql

my $sthH = $dbh->prepare("INSERT INTO hardware (cpu_type, cpu_count, memory) VALUES (?,?,?)"); 
$resultH = $sthH->execute($cpu_type, $cpu_count, $memory); 
$hardware_id = $dbh->selectrow_array("SELECT MAX(hardware_id) FROM hardware;"); 
+1

Обратите внимание, что MySQL специальная команда «последней вставки идентификатор» доступен во всех клиентов (так как он реализован сервер сторона) и ограничивается соединением клиента. Это означает, что если вы не делаете дополнительной вставки внутри одного и того же клиента, вы должны быть в безопасности! – arkascha

+1

уже ответил здесь: http://stackoverflow.com/questions/13893519/how-can-i-call-a-mysql-function-like-mysql-insert-id-from-perl-im-im-using-db –

+1

И .... поэтому все базы данных должны поддерживать 'INSERT ... RETURNING'. Все эти вещи на уровне сеанса глупы. –

ответ

1

это, как я это делаю, в случае, если вы все еще возникают проблемы

$sth->execute() or $self->error(__PACKAGE__, __LINE__, 
           DBI->errstr, DBI->err, 0, 1, 0); 
$sth->finish(); 
return ($dbh->{mysql_insertid}); 
Смежные вопросы