Ошибка Perl DBD :: SQLite :: db: синтаксическая ошибка - PullRequest
0 голосов
/ 02 ноября 2018

Я разрабатываю сценарий Perl для запроса API PasteBin с использованием потоков и DBD :: SQLite для хранения информации на будущее.

После запуска моего скрипта я получаю следующую ошибку:

DBD::SQLite::db do failed: near "day": syntax error at getpaste.pl line 113.
Thread 3 terminated abnormally: DBD::SQLite::db do failed: near "day": syntax error at getpaste.pl line 113.

Использование моего кода для отладки, вот что я вижу в thread 3:

enum _Days {
  Monday,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday,
  Sunday
}

class HeadingItem implements ListItem {
  String _weekday;
  final int time;
  final DocumentReference reference;

  set day(String weekday) {
    var value = _Days.values[int.parse(weekday) - 1].toString();
    var idx = value.indexOf(".") + 1;
    var result = value.substring(idx, value.length);
    _weekday = result;
  }

  String get day {
    return _weekday;
  }

  HeadingItem.fromMap(Map<String, dynamic> map, {this.reference})
      : assert(map['day'] != null),
        assert(map['time'] != null),
        day = map['day'], // 'day' isn't a field in the enclosing class  <--- this is the error that im stuck on...
        time = map['time'];

  HeadingItem.fromSnapshot(DocumentSnapshot snapshot) : this.fromMap(snapshot.data, reference: snapshot.reference);
}

Если бы мне нужно было сделать обоснованное предположение, оно взорвалось бы на String get day {

Вот фрагмент моего кода, где это имеет отношение:

sub threadCheckKey {
    my ($url, $key) = @_;
    my $fullURL = $url.$key;
    my @flaggedRegex = ();
    my $date = strftime "%D", localtime;
    my @data = ();

    my $thread = threads->create(sub {
        my $dbConnection = openDB();
        open(GET_DATA, "curl -s " . $fullURL . " -k 2>&1 |") or die("$!");
        open(WRITE_FILE, ">", $key . ".txt") or die("$!");
        while(my $line = <GET_DATA>) {
            print WRITE_FILE $line;
            foreach my $regex(@regexs) {
                if($line =~ m/$regex/) {
                    if(!($regex ~~ @flaggedRegex)) {
                        push(@flaggedRegex, $regex);
                    }
                }
            }
        }
        close(WRITE_FILE);
        close(GET_DATA);


        open(READ_FILE, $key . ".txt") or die("$!");
        while(my $line = <READ_FILE>) {
            push(@data, $line);
        }
        close(READ_FILE);

        my $updateRow = qq(UPDATE $tables[0] set data = \'@data\', date = \'$date\', regex = \'@flaggedRegex\' where pastekey = \'$key\');
        my $executeRowUpdate = $dbConnection->do($updateRow);

        if($executeRowUpdate < 0) {
            print $DBI::errstr;
        }

Строка 113 в этом случае - my $executeRowUpdate = $dbConnection->do($updateRow); Зная Perl, он действительно жалуется на мое утверждение UPDATE чуть выше него.

Куда я иду с этим? Я новичок, когда дело доходит до взаимодействия с чем-либо, связанным с SQL.

1 Ответ

0 голосов
/ 03 ноября 2018

Вам необходимо зарегистрировать $updateRow, который сгенерирован, а затем посмотреть на это и посмотреть, что с ним не так. Без этого никто не знает.

Другие проблемы, замеченные икегами в комментарии выше, вероятно, заслуживают новых вопросов, сфокусированных на их индивидуальных аспектах. Как вы обнаружили, https://codereview.stackexchange.com/ не для кода с ошибками. Но, учитывая все проблемы с впрыском, возможно, пришло время попробовать https://security.stackexchange.com/

Если вы исправите эти проблемы, возможно, ваша ошибка тоже исчезнет. Или нет, но это стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...