Perl и DBI - проблема с загрузкой массива - PullRequest
0 голосов
/ 27 марта 2011

Я новичок в Perl и мне нужна помощь.

В Mysql у меня есть таблица с заполненным списком задач.

В начале моего сценария я хочу добавить эти значения в "my% todo"

Но я не могу понять, как это сделать ...

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 27 марта 2011

ОК, давайте играть в марсианский ровер, хотя я бы лучше посмотрел код.

А вы use warnings; use strict?Если нет, сделай это.Если да, есть ли какие-либо предупреждения или ошибки?

Если вы добавите print "while\n"; в цикл while, сколько while вы получите на экране?Сколько записей в таблице?

Если вы используете DBI, включите исключения: $dbh->RaiseError(1); ($ dbh здесь ваш дескриптор базы данных) перед любыми операциями с БД.

1 голос
/ 27 марта 2011

Я не понимаю, почему вы запрашиваете "загрузить массив" и указываете хэш% todo, но если вы хотите прочитать таблицу в память один раз, вам следует обратиться к методу $ dbh-> selectall_arrayref ().

Добавлено: посмотрите, с чего начать:

    my $dsn = '...';
    my $user = '...';
    my $password = '...';
    my $dbh = DBI->connect( $dsn, $user, $password, { RaiseError => 1, AutoCommit => 0 } );
    my $sql = 'SELECT ... FROM Todo';
    my %todo = ();
  if (0) {
    my $sth = $dbh->prepare( $sql );
    $sth->execute();
    while (my $aref = $sth->fetchrow_arrayref()) {
      $todo{ $aref->[ 0 ] } = $aref->[ 1 ];
    }
    $sth->finish();
  } else {
    my $aref = $dbh->selectall_arrayref($sql);
    for (@$aref) {
      $todo{ $_->[ 0 ] } = $_->[ 1 ];
    }
  }
    for (keys( %todo )) {
      print $_, "\n", $todo{ $_ }, "\n\n";
    }
    my $rc = $dbh->disconnect();
0 голосов
/ 28 марта 2011
use strict;
use warnings;
my $dbh = $dbh->connect;
$dbh->{RaiseError} = 1;
my $sth = $dbh->prepare(q/select id, to_do from to_do_table/);
$sth->execute;
my %todo;
while(my ($id, $to_do) = $sth->fetchrow) {
    $todo{$index_column} = $to_do;
}
$dbh->disconnect;
...