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

标签 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();

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

DBD::mysql::st execute failed: You have an error in your SQL syntax; check the m anual that corresponds to your MySQL server version for the right syntax to use near '' )' at line 2 at C:\Users\Desktop\findlogstamp\sqlneu.pl lin e 50, line 1. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' )' at line 2 at C:\User s\Desktop\findlogstamp\sqlneu.pl line 50, line 1.

最佳答案

您可能会因为将变量作为字符串传递而导致引用错误。您应该改用占位符。

尝试做这样的事情:

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;

我还包括了 mwp's answer too .

同样值得花时间阅读Borodins Answer以更彻底的方式处理 perl 中的占位符和 SQL。

关于mysql - 为什么 MySQL 给我一个语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39294123/

相关文章:

Java + MySQL : Do i have a good way to encrypt a password?

php - "Lost connection to MySQL server"错误,但实际发生后1小时?

php - 带有 INSERT 语句的简单 PHP CMS

java - 尝试通过 Inline::Java 模块将 Java 内联到 Perl

perl - 如何使用 perl 按值对散列的散列进行排序?

perl - Perl 中 localtime 函数的反面是什么?

php - 数据库表单中的多个复选框

php - 如何使表格中显示的数据随选择框中选择的值而变化?

linux - 连接到主机并重放输出

perl - 如何使用 Perl 在 Gitlab 中创建问题