为什么MySQL给我一个语法错误?

Zes*_*Rex 0 mysql perl

所以我几乎是一个新的编码新手,我有点学习试用和错误,这次我尝试使用Perl的数据库,实际上当我只使用3个表头时它很好用(终端,Zeitstempel,Ergebnisnummer )但是当我尝试添加更多标题(Ergebnistext,Transart,Belegnummer,Trace,Betrag,Kartenart,Kartennummer,Entrymode)时,它总是给我一个语法错误,我检查了半个小时,但无法找到错误.如果有人知道为什么我会感激你的帮助!这部分代码看起来像这样:

            foreach $file (@file)
        {
            $currentfile = "$currentdir\\$file";
            open(zloop, "<", $currentfile) or die "Failed to open file: $!\n";
                    while ( <zloop> ) {
                    my %row;
                    chomp;
                    @row{@headers} = split /;/;
                    my $tid = $row{'tid'}; 
                    my $zeit = $row{'zeit'};
                    my $ergebnisnummer = $row{'ergebnisnummer'};
                    my $ergebnistext = $row{'ergebnistext'};
                    my $transart = $row{'transart'};
                    my $belegnummer = $row{'belegnummer'};
                    my $trace = $row{'trace'};
                    my $betrag = $row{'betrag'};
                    my $kartenart = $row{'kartenart'}; 
                    my $kartennummer = $row{'kartennummer'};
                    my $entrymode = $row{'entrymode'}; 

    my $sth = $dbh->prepare("INSERT INTO `teso`( Terminal, Zeitstempel, Ergebnisnummer, Ergebnistext, Transart, Belegnummer, Trace, Betrag, Kartenart, Kartennummer, Entrymode ) 
    values ( $tid, $zeit, $ergebnisnummer, $ergebnistext, $transart, $belegnummer, $trace, $betrag, $kartenart, $kartennummer, $entrymode )");
    $sth->execute() or die $DBI::errstr;
    $sth->finish();
Run Code Online (Sandbox Code Playgroud)

我没有将变量名称更改为英语,因为它们可能导致语法错误.这是错误消息:

DBD :: mysql :: st执行失败:您的SQL语法出错; 检查与您的MySQL服务器版本相对应的m aual,以便在C:\ Users\Desktop\findlogstamp\sqlneu.pl第50行第1行的第2行''''附近使用正确的语法.您有错误你的SQL语法; 检查与您的MySQL服务器版本相对应的手册,以便在C:\ User s\Desktop\findlogstamp\sqlneu.pl第50行第1行的第2行''''附近使用正确的语法.

Dra*_*oan 6

您可能会因为将变量作为字符串传递而产生引用错误.您应该使用占位符.

尝试做这样的事情:

my $sth = $dbh->prepare('INSERT INTO `teso`( Terminal, Zeitstempel, Ergebnisnummer, Ergebnistext, 
   Transart, Belegnummer, `Trace`, Betrag, Kartenart, Kartennummer, Entrymode ) 
   values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )');
$sth->execute($tid, $zeit, $ergebnisnummer, $ergebnistext,
   $transart, $belegnummer, $trace, $betrag, $kartenart,
   $kartennummer, $entrymode) or die $DBI::errstr;
Run Code Online (Sandbox Code Playgroud)

我也包括了mwp的答案.

同时值得一读Borodins答案,以便更全面地了解perl中的占位符和SQL.