如何使用DBD :: mysql和Perl检查数据库行是否存在?

时间:2010-11-14 17:51:01

标签: mysql perl dbi dbd

我正在使用MySQL数据库,需要在决定运行哪些查询之前检查是否已存在行。

我正在研究的表是这样的:

player(playerid, nickname, data1, data2, data3)

其中“playerid”是自动递增的数字,“昵称”是唯一的。

我尝试了COUNT,COALESCE,fetch->行等的一些查询。并且无处可去。我已经看过this question,但无法解决任何问题。

2 个答案:

答案 0 :(得分:5)

您能否发布SELECT COUNT(*)无效的具体查询以及问题所在?

查询应根据以下答案建模:How do I know how many rows a Perl DBI query returns?

假设你的“行已经存在”定义是“具有给定昵称的玩家在那里”,查询将是:

my $th = $dbh->prepare(qq{SELECT COUNT(1) FROM player WHERE nickname='$nickname'});
$th->execute();
if ($th->fetch()->[0]) {
    ....
} # Code stolen shamelessly from the link above

答案 1 :(得分:0)

您可以使用某些dbh / sth方法来检查结果集是否为空:

my $stmt = 'SELECT playerid FROM player WHERE playerid = ?';

if ($dbh->selectrow_array($stmt, undef, $id)) {
    print "The row exists";
}