这是我密码的一部分。我选择使用从gmail接收的消息ID。Msg_id以base64的形式存储在数据库中,不带simbols“”。my $inbox = $imap->select("Inbox") or die "Select error: ", $imap->LastError, "\n";my @mails = ( $imap->unseen );foreach my $msgid (@mails) { my $m_id = $imap->parse_headers( $msgid, "Message-id" )->{"Message-id"}->[0] . "\n"; $m_id =~ s/[<\>]//g; $m_id = encode_base64($m_id); $m_id =~ s/\r?$//; my $q1 = "select id from mails.mails_in where user_id=$param[5] and message_id=$m_id and user_remote_id=$param[6]"; $sth = $dbh->prepare($q1); $rv = $sth->execute(); my @array; while ( @array = $sth->fetchrow_array() ) { foreach my $i (@array) { print "$i\t"; } print "\n"; }}但得到了这个错误。DBD::Pg::st execute failed: ERROR: column "zdjkot..." does not existLINE 1: ...mails.mails_in where user_id=15206 and message_id=ZDJkOTQ1NT... ^ at ./script.pl line 65.我尝试从基中使用一个现有的MSGYID,结果是相似的。另一个SELECT的工作正常。类似的SELECT在php上也能正常工作。我使用:Perl版本5.18.2,PostgreSQL版本8.4.14 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您缺少$m_id的单引号my $q1 = "select id from mails.mails_in where user_id=$param[5] and message_id='$m_id' and user_remote_id=$param[6]";但最好使用?占位符,my $q1 = "select id from mails.mails_in where user_id =? and message_id =? and user_remote_id =?";$sth = $dbh->prepare($q1);$rv = $sth->execute($param[5], $m_id, $param[6]);因为您不必担心引号、参数转义或SQL injection attacks。 (adsbygoogle = window.adsbygoogle || []).push({});
09-07 17:19