這裏是一個Perl代碼SNIPPIT:DBD :: SQLite的:: ST執行所失敗:數據類型不匹配
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 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
''
...我無法看到數據類型不匹配。
'null'從哪裏來?在Perl中拼寫爲'undef'。 – friedo 2010-04-11 06:02:37
這是數據庫中的一個空字段......但是,是的,它導致了這個問題。 這個奇怪的部分是,這個bug作爲代碼的修訂版本彈出來,它也使用null ...並且它不會在那裏造成問題。我不得不仔細看看之前我在做什麼...... – 2010-04-11 06:41:18