2013-11-21 2 views
2

누가 1 년 추가가 나를 위해 효과가 없는지 알아낼 수 있습니까?mysql date_add 1 년

다른 여섯 가지 조건 (1 일, 1 주, 2 개월 등)이 있습니다. 작동하지 않는 유일한 해는 해다.

누구나 볼 수 있습니까? 문제가되는 경우 Perl입니다.

elsif ($data{length} == "6month") 
{ 
$store = qq(INSERT INTO main (creator_name,email2,relationship,reason,email1,name1,creator_email,email3,name2,name3,creator_url,victim_url,length_of_stay,release_date) VALUES("$data{creatorname}","$data{email2}","$data{relationship}","$data{reason}","$data{email1}","$data{person1}","$data{creatoremail}","$data{email3}","$data{person2}","$data{person3}", "$creatorURL", "$victimURL","$data{length}", DATE_ADD(NOW(), INTERVAL 6 MONTH))); 
} 
elsif($data{length} == "1year") 
{ 
$store = qq(INSERT INTO main (creator_name,email2,relationship,reason,email1,name1,creator_email,email3,name2,name3,creator_url,victim_url,length_of_stay,release_date) VALUES("$data{creatorname}","$data{email2}","$data{relationship}","$data{reason}","$data{email1}","$data{person1}","$data{creatoremail}","$data{email3}","$data{person2}","$data{person3}", "$creatorURL", "$victimURL","$data{length}", DATE_ADD(NOW(), INTERVAL 1 YEAR))); 
} 

my $sth = $dbh->prepare($store); 
$sth->execute() or die $dbh->errstr; 
+2

나는 * *와 * "작동하지 않는" "작동하지 않습니다"보다 더 나은 설명을 가지고 올 수 확신 * : 당신이 있다면, 당신은이 같은 경고를받은 것 – Borodin

답변

3

perl에서 문자열 비교에 'eq'연산자를 사용해야합니다.

elsif ($data{length} eq '6month') { 

또한 SQL 문에 자리 표시자를 사용하는 것이 좋습니다. 때문에 : 그들은이

  • 거의 같은
  • 그것은 SQL 주입으로부터 당신을 보호 할 것입니다
  • 당신은 루프에서 당신과 비슷한 문
  • 당신은 줄일 수 때 더 빠른, 하나의 준비된 문장을 여러 번 사용할 수 있습니다 코드 반복. 이 루프 외부 루프 이동에 $dbh->prepare 문이 삽입해야 할 경우

    my $interval = 0; 
    ... 
    elsif ($data{length} eq '6month') { 
        $interval = 6; 
    } 
    elsif($data{length} eq '1year') { 
        $interval = 12; 
    } 
    my $sth = $dbh->prepare('INSERT INTO main (creator_name, email2, relationship, reason, email1, name1, creator_email, email3, name2, name3, creator_url, victim_url, length_of_stay, release_date) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, DATE_ADD(NOW(), INTERVAL ? MONTH));'); 
    $sth->execute($data{creatorname}, 
           $data{email2}, 
           $data{relationship}, 
           $data{reason}, 
           $data{email1}, 
           $data{person1}, 
           $data{creatoremail}, 
           $data{email3}, 
           $data{person2}, 
           $data{person3}, 
           $creatorURL, 
           $victimURL, 
           $data{length}, 
           $interval 
          ) or die $dbh->errstr; 
    

    : 자신을 반복하지 마십시오

귀하의 코드 의지처럼 보인다.

2

루트에서의 문제점은 경고를 활성화하지 않는다는 것입니다.

$ perl 
use warnings; 
$data{length} = "1year"; 

if ($data{length} == "1month") { 
    print "yes, 1month does == 1year\n"; 
} 
__END__ 
Argument "1month" isn't numeric in numeric eq (==) at - line 4. 
Argument "1year" isn't numeric in numeric eq (==) at - line 4. 
yes, 1month does == 1year