2013-12-12 49 views
0

我想添加功能請求確認,然後再添加條目到數據庫中,並且還想檢查數據庫中是否存在該迭代,然後應該拋出警告消息。我的代碼是:確認消息和警告消息設置

真正創造迭代

my $dbh = DBI->connect(
    "dbi:mysql:dbname=agilefant-test", 
    "agilefant-test", 
    "Agilefant-test", 
    { RaiseError => 1 }, 
) or die $DBI::errstr; 

foreach $iter (keys(%iterations)) { 
     my $req = "INSERT into backlogs (backlogtype, name, startDate, endDate, parent_id) VALUES ('Iteration', '$iter', '" . 
           $iterations{ $iter }->{start} . " 08:00', '" . 
           $iterations{ $iter }->{end} . " 18:00', '" . 
           $project . "');" ; 
     print $req . "\n"; 

my $sth = $dbh->prepare("INSERT into backlogs (backlogtype, name, startDate, endDate, parent_id) VALUES ('Iteration', '$iter', '" . 
           $iterations{ $iter }->{start} . " 08:00', '" . 
           $iterations{ $iter }->{end} . " 18:00', '" . 
           $project . "');"); 
$sth->execute() or die $DBI::errstr; 
$sth->finish(); 

} 
+2

難道你不能提出一個比'你好,我想問'更好的問題標題嗎? – devnull

+0

@devnull感謝您的建議 –

+0

您不需要在問題標題中包含語言。改用標籤。 – devnull

回答

0

我不知道如果我正確理解你的問題。

要求確認:我會不喜歡

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"; 
} 

當然,這可以,如果你使用綁定變量更有效率(並且在無法切換$ iter的源的情況下防止sql注入):

# 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"; 
} 

如果在名稱列上有一個唯一的索引,那麼也可以只執行insert語句,然後檢查oracle錯誤ORA-23000,這意味着您只是試圖插入第二行。

+0

糟糕,只是注意到你使用的是mysql。在這種情況下,ORA-23000成爲mysql錯誤代碼2525. –

+0

thansk,但當我嘗試了警告消息,我越來越:DBD :: mysql :: st fetchrow_array失敗:fetch()沒有執行()在./create_iteration.pl行99. DBD :: mysql :: st fetchrow_array失敗:fetch()沒有執行()在./create_iteration.pl行99. –

+0

當我使用確認它要求添加迭代或不只爲1,3,4,5迭代不是2. :(和給出錯誤在substr中使用未初始化的值在 –