여기 펄 코드의 SNIPPIT입니다 :DBD :: SQLite는 :: 일이 실패 실행 : 데이터 형식이 일치하지
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.
$ 삽입의 값보고 있어요 :
를[null '1270950742' '1270951642' 'asdf' 'asdf' 'adsf' 15 '']
:
[INSERT INTO timesheet(idx,Start_Time,End_Time,Project,Ticket_Number,Site,Duration,Notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?);]
여기 @values 있습니다
여기 여기 일이 줄 방법은 '출퇴근'
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'은 어디에서 왔습니까? 펄에서는'undef'라고 쓰여 있습니다. – friedo
그건 데이터베이스의 null 필드입니다 ...하지만, 네, 그게 문제의 원인이었습니다. 이 이상한 부분은이 버그가 null도 사용하는 코드 개정으로 나타났습니다 ... 거기에는 문제가 없었습니다. 내가 전에하고 있었던 일에 대해 좀 더 자세히 살펴 봐야 할 것입니다 ... –