2014-01-19 55 views
2

在数据库中,该行的标识是自动生成的。如果在此代码和SELECT中的执行之间执行INSERT,则会返回错误的ID。有没有更好的替代方法来获得id,并保证它将来自我插入的行。我明白这两个陈述将会非常接近地发生,但我仍然想知道是否有更好的方法来做到这一点。获取最后插入的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的特定命令“最后插入ID”适用于所有的客户端(因为它是实现服务器侧)并且仅限于客户端连接。这意味着除非你不在同一个客户端中做任何额外的插入,否则你应该是安全的! – arkascha

+1

已经在这里解答:http://stackoverflow.com/questions/13893519/how-can-i-call-a-mysql-function-like-mysql-insert-id-from-perl-if-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}); 
相关问题