[英]Using MYSQL LAST_INSERT_ID() to retrive the ID of inserted row?
[英]Perl and MySQL - Return a field from last row of a table using DBI possibly with last_insert_id?
我试图从最后一行users
的表users
返回成员firstname
字段。
my $dbh = DBI->connect($dsn, $db_user_name, $db_password) or die "$DBI::errstr";
my $LastID = $dbh->last_insert_id(`firstname`); ##but I want from table users
print qq~$LastID~;
从上面返回此错误:
DBI last_insert_id: invalid number of arguments: got handle + 0, expected handle + between 4 and 5
Usage: $h->last_insert_id($catalog, $schema, $table_name, $field_name [, \%attr ])
那么,从表中users
的最后一行获取字段firstname
最佳方式是什么(最好是最好的服务器,最快,最少的内存,负载,最少的开销......等等)?
认识到我上面的例子是不被认真对待,因为我不知道如何做到这一点,而不仅仅是做我的粗略,但功能:(ps UserID不是通过自动增量分配,但是,按数字顺序,新用户得到更高的用户ID。就像我解决预先存在的问题时那样。)
my $dbh = DBI->connect($dsn, $db_user_name, $db_password) or die "$DBI::errstr";
my $dsn = $dbh->prepare(qq{SELECT `firstname` FROM `users` ORDER BY ABS(UserID) DESC LIMIT ?,?});
$dsn->execute('1','1') or die "$DBI::errstr";
while(@nrow = $dsn->fetchrow_array()) {
$firstname = $nrow[0];
}
我假设因为我使用DBI可能提供最好的解决方案但是,我显然缺乏经验,需要一些建议和指导来学习正确的方法来做到这一点。 谢谢你的帮助。
你提到UserID没有自动递增,所以我不确定last_insert_id是否可以在这种情况下工作。 可能,但我不确定。 该文件指出:
通常,这是由数据库服务器分配给具有auto_increment或serial类型的列的值。
我想通过使用SQL语句来解决这个问题:
SELECT
u.firstname
FROM
users u
JOIN
(
SELECT
MAX(UserID) AS UserID
FROM
users
) t ON u.UserID = t.UserID
DBI的代码如下所示:
my $stmt = 'SELECT u.firstname FROM users u JOIN(SELECT MAX(UserID) AS UserID FROM users) t ON u.UserID = t.UserID';
my $first_name = ($dbh->selectrow_array($stmt))[0];
last_insert_id方法需要4个参数。 使用这样:
my $id = $connection->last_insert_id(undef, 'myschemaname', 'mytablename', 'mycolumnname');
请参阅DBI窗格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.