Perl 要设置的确认消息和警告消息

Perl 要设置的确认消息和警告消息,perl,Perl,我想添加功能,在将条目添加到数据库之前请求确认,还想检查该迭代是否存在于数据库中,然后它应该抛出警告消息。我的代码是: 真正创建迭代 我不确定我是否正确理解了你的问题 请求确认:我会做类似的事情 print "insert iteration $iter?"; $yesno=<>; if (substr($yesno, 0, 1) eq "y") { .... handle the insert } $stmt="select count(1) from backlogs

我想添加功能,在将条目添加到数据库之前请求确认,还想检查该迭代是否存在于数据库中,然后它应该抛出警告消息。我的代码是:

真正创建迭代
我不确定我是否正确理解了你的问题

请求确认:我会做类似的事情

print "insert iteration $iter?";
$yesno=<>;
if (substr($yesno, 0, 1) eq "y") {
    .... handle the insert
}
$stmt="select count(1) from backlogs where name='$iter'";
$sth=$dbh->prepare($stmt);
$sth->execute();
($count)=$sth->fetchrow_array();
if ($count>0) {
    print "WARNING: $iter already exists.\n";
}
当然,如果您使用绑定变量(并且在无法truse$iter的源代码的情况下也可以防止sql注入),这可以提高效率:


如果名称列上有唯一的索引,您也可以执行insert语句,然后检查oracle错误ORA-23000,这意味着您刚刚尝试插入第二行。

您不能想出一个比
更好的问题标题吗,我想问一下
?@devnull感谢您的建议您不需要在问题标题中包含语言。用标签代替。哎呀,刚刚注意到你在使用mysql。在这种情况下,ORA-23000变成了mysql错误代码2525.thansk,但当我尝试获取警告消息时,我得到了:DBD::mysql::st fetchrow_array失败:fetch()不带execute(),位于./create_iteration.pl第99行。DBD::mysql::st fetchrow_数组失败:fetch()不带execute()。/create_iteration.pl第99行。当我使用确认时,它要求仅为1,3,4,5次迭代添加迭代或不添加迭代,而不是2次:(并在substr atSorry中错误地使用未初始化的值,但我不能回答这个问题,因为我不知道程序的其余部分。在execute之后直接使用的fetch当然不应该在没有execute警告的情况下给出fetch,除非您混淆了一些变量。
$stmt="select count(1) from backlogs where name='$iter'";
$sth=$dbh->prepare($stmt);
$sth->execute();
($count)=$sth->fetchrow_array();
if ($count>0) {
    print "WARNING: $iter already exists.\n";
}
# this goes in front of the loop
$stmt="select count(1) from backlogs where name=?";
$sth=$dbh->prepare($stmt);

# this goes inside the loop
$sth->execute($iter);
($count)=$sth->fetchrow_array();
if ($count>0) {
    print "WARNING: $iter already exists.\n";
}