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()
を呼び出すことにより、多くのコードを削除し、insert文からフィールドを削除し始めることができます。
私は@valuesの内容を少し不審なよ、あなたはしている印刷こと - 間違いなく整数型と一致しませんすべての値を囲む引用符、でも整数が存在することが表示されます。
。他のヒント
問題はIDXのために「ヌル」を挿入していました。明示的に「IDX」を挿入していないことはOKで、自動インクリメントは、その...
の世話をしますShouldaダウン以前のことを分けます。
所属していません StackOverflow