Frage

Hier ist ein snippit von Perl-Code:

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;
}

Ich sehe den Fehler

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

Der Wert von $ einfügen:

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

Hier sind @values:

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

Hier ist das Schema der 'Zeiterfassungs'

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

Hier ist, wie die Dinge in einer Reihe aufstellen:

----
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
''

... Ich kann die Datentyp Fehlanpassung sehen.

War es hilfreich?

Lösung

Versuchen Sie den Code unten, um kleinere und ähnliche Stücke zu reduzieren, um zu sehen, wie klein man es bekommen kann und zeigen noch den Fehler (oder alternativ sehen, was Schritt das Problem verschwindet). Sie könnten eine Menge Code entfernen Sie einfach durch execute() mit einem bloßen String-Abfrage aufrufen, und starten Sie dann Felder aus der Insert-Anweisung zu entfernen.

Ich bin ein wenig misstrauisch den Inhalt der @values, dass Sie den Druck -. Es scheint, dass es in Anführungszeichen jeden Wert, auch die ganzen Zahlen, die definitiv nicht eine ganze Zahl Typ entsprechen

Andere Tipps

Das Problem war, mit einem 'Null' für idx einfügen. Nicht Einfügen ‚idx‘ explizit ist OK, das Autoinkrement kümmert, dass ...

Shoulda gebrochen, dass nach unten früher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top