Как я могу получить последнюю строку, которую я вставил, используя DBI? - PullRequest
33 голосов
/ 15 декабря 2009

Как я могу извлечь последнюю строку, которая была вставлена, используя DBI ( DBD :: mysql )?

Пример кода:

my $sth = $dbh->prepare('INSERT INTO a ( x, y, z ) VALUES ( ?, ?, ? )');
$sth->execute( $x, $y, $z );

Как я могу получить доступ к данным, которые были вставлены с помощью вышеприведенного оператора prepare? Мне нужно получить значение основного идентификатора (AUTOINCREMENT).

UPDATE

С DBD :: mysql Документация:

Альтернативный способ доступа к этому атрибут через $dbh->{'mysql_insertid'}.

Спасибо Манни и n0rd за ваши ответы. : -)

Ответы [ 3 ]

30 голосов
/ 15 декабря 2009

Это свойство дескриптора оператора. Вы должны быть в состоянии получить доступ к идентификатору, как это:

$sth->{mysql_insertid}
27 голосов
/ 23 сентября 2014

Независимый от базы данных подход заключается в использовании метода DBI last_insert_id Такой подход помогает уменьшить зависимость от конкретной базы данных:

$ dbh-> last_insert_id

$rv = $dbh->last_insert_id($catalog, $schema, $table, $field);

Возвращает значение, идентифицирующее только что вставленную строку, если это возможно. Обычно это будет значение, назначенное сервером базы данных для столбца с типом auto_increment или serial. Возвращает undef, если драйвер не поддерживает метод или не может определить значение.

6 голосов
/ 15 декабря 2009

SELECT LAST_INSERT_ID() запрос также вернет то, что вы хотите.

...