Forum Webscript.Ru

Программирование => Perl => Тема начата: DartSidius от 11 Декабря 2006, 18:38:42

Название: LAST_INSERT_ID() :: DBI
Отправлено: DartSidius от 11 Декабря 2006, 18:38:42
таблица поле id auto_incriment

пытаюсь узнать id последнего добавленого элемента

   my $query = $Mysql::dbh->prepare("SELECT LAST_INSERT_ID(id) FROM pages_mod");

   $query->execute();
   $id = $query->fetchrow_arrayref()->
   $query->finish();

почему то всегда выдаёт id первого добавленого элемента
Название: LAST_INSERT_ID() :: DBI
Отправлено: ravshaniy от 11 Декабря 2006, 18:54:32
честно я еще не юзал это, просто по аналогии должно быть что то вроде такого

$dbh->last_insert_id()

#last_insert_id
#  $rv = $dbh->last_insert_id($catalog, $schema, $table, $field);
#  $rv = $dbh->last_insert_id($catalog, $schema, $table, $field, \\%attr);
#Returns a value \'identifying\' the row just inserted, if possible. Typically
#this would be a value assigned by the database server to a column
#with an auto_increment or serial type. Returns undef if the driver
#does not support the method or can\'t determine the value.

и вместо dbh->prepare()
$query->execute();

здесь используется ->do()
Название: LAST_INSERT_ID() :: DBI
Отправлено: ctax от 12 Декабря 2006, 08:44:37
print $dbh->selectrow_array("select id from table order by 1 desc limit 1");
Название: LAST_INSERT_ID() :: DBI
Отправлено: ravshaniy от 13 Декабря 2006, 14:26:04
Цитировать
ctax:
print $dbh->selectrow_array("select id from table order by 1 desc limit 1");

Может давать ошибку, База данных предполагает множество одновременных конектов и если паралельный коннект будет одновременно производить инсерт в эту таблицу. То есть вероятность того что запрос на селект может встать в очередь не сразу после своего инсерта, а за несколькими инсертами. Которые будут выполнятся по мере поступления FIFO или в другой последовательности LIFO в общем. есть вероятность в многопользовательской среде получить не свой айди