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;");
注意,MySQL的特定命令“最后插入ID”适用于所有的客户端(因为它是实现服务器侧)并且仅限于客户端连接。这意味着除非你不在同一个客户端中做任何额外的插入,否则你应该是安全的! – arkascha
已经在这里解答:http://stackoverflow.com/questions/13893519/how-can-i-call-a-mysql-function-like-mysql-insert-id-from-perl-if-im-using-db –
而....这就是为什么所有数据库都需要支持'INSERT ... RETURNING'。所有这些会议级别的东西都很愚蠢。 –