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

Gur*_*rzo 1 mysql perl dbi dbd

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

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

player(playerid, nickname, data1, data2, data3)
Run Code Online (Sandbox Code Playgroud)

其中"playerid"是自动递增的数字,"昵称"是唯一的.

我尝试了COUNT,COALESCE,fetch-> rows等的一些查询.并且无处可去.我已经看到了这个问题,但无法解决任何问题.

DVK*_*DVK 5

你能否发布具体的查询SELECT COUNT(*),但没有问题,问题是什么?

该查询应该根据以下答案建模:我如何知道Perl DBI查询返回多少行?

假设你的"行已经存在"定义是"具有给定昵称的播放器在那里",查询将是:

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
Run Code Online (Sandbox Code Playgroud)

  • 老问题,不知道我搜索了什么,把我带到了这个页面.我猜测向下投票可能是因为这有几个原因:(1)直接在查询中插入`$ nickname`打开你的SQL注入; (2)为什么要为不多次召唤的事情做好准备?缓存在这里没有任何好处; (3)DBI具有允许您在一个步骤中查询和提取结果的方法(例如,`selectall_array`); (4)如果我的SQL表现得像Postgres,即使你没有收到任何记录,你的if语句也可能总是通过.您可能需要明确检查"0E0" (2认同)