DBD :: SQLite :: st执行失败:数据类型不匹配

时间:2010-04-11 03:15:39

标签: perl dbi type-mismatch

以下是perl代码的信息:

sub insert_timesheet {
    my $dbh = shift;
    my $entryref = shift;
    my $insertme = join(',', @_);
    my $values_template = '?, ' x scalar(@_);

    chop $values_template;
    chop $values_template; #remove trailing comma

    my $insert = "INSERT INTO timesheet( $insertme ) VALUES ( $values_template );";
    my $sth = $dbh->prepare($insert);
      debug("$insert");
    my @values;
    foreach my $entry (@_){
        push @values, $$entryref{$entry}
    }
      debug("@values");
    my $rv = $sth->execute( @values ) or die $dbh->errstr;
      debug("sql return value: $rv");
    $dbh->disconnect;
}

我看到了错误

DBD::SQLite::st execute failed: datatype mismatch at timesheet line 85.

$ insert:

的值
[INSERT INTO timesheet( idx,Start_Time,End_Time,Project,Ticket_Number,Site,Duration,Notes ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? );]

以下是@values:

[null '1270950742' '1270951642' 'asdf' 'asdf' 'adsf' 15 '']

这是'时间表'

的架构
timesheet( 
    idx INTEGER PRIMARY KEY AUTOINCREMENT 
    , Start_Time VARCHAR
    , End_Time VARCHAR
    , Duration INTEGER
    , Project VARCHAR
    , Ticket_Number VARCHAR
    , Site VARCHAR
    , Notes VARCHAR
)

以下是事情的排列方式:

----
Insert Statement
Schema
@values
----

idx
idx INTEGER PRIMARY KEY AUTOINCREMENT
null:  # this is not a mismatch, passing null will allow auto-increment.

Start_Time
Start_Time VARCHAR
'1270950742'

End_Time
End_Time VARCHAR
'1270951642'

Project
Project VARCHAR
'asdf'

Ticket_Number
Ticket_Number VARCHAR
'asdf'

Site
Site VARCHAR
'adsf'

Duration
Duration INTEGER
15

Notes
Notes VARCHAR
''

......我看不到数据类型不匹配。

2 个答案:

答案 0 :(得分:3)

问题在于为idx插入'null'。不明确地插入'idx'就可以了,自动增量处理......

应该早点打破这个。

答案 1 :(得分:2)

尝试将代码缩小到较小和相似的块,以查看它可以获得多小并仍然显示错误(或者,看看问题消失的步骤)。您可以通过使用裸字符串查询调用execute()来删除大量代码,然后从insert语句中删除字段。

我对你正在打印的@values的内容有点怀疑 - 看起来每个值周围都有引号,甚至是整数,它们肯定不会与整数类型匹配。