DBD :: SQLite的:: ST执行所失败:数据类型不匹配
-
26-09-2019 - |
题
下面是Perl代码SNIPPIT:
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
''
...我无法看到的数据类型不匹配。
解决方案
尝试减少你的代码到更小的和类似的块,就看你如何能少得到它,仍然表现出错误(或者,看到哪一步的问题就会消失)。你可以通过简单地调用execute()
与裸字符串查询中删除了大量的代码,然后开始从插入语句删除字段。
我是有点怀疑的@values的内容要打印 - 它似乎有周围的每一个值引号,即使是整数,这肯定不会匹配的整数类型
其他提示
的问题是用插入一个“空”为IDX。不插入“IDX”明确是正常时,自动递增需要照顾......
的早该破碎下来更早。
不隶属于 StackOverflow