Perl разбить стринг

Есть вот такая конструкция

foreach ($cook->{img_ids}) {
        my @dress = ();
        my $sth = $dbh->prepare("SELECT pid FROM imnew WHERE id IN (".$cook->{img_ids}.")");
        my $rvs = $sth->execute or die "execute: ".$sth->errstr."\n";
        while (my $dre = $sth->fetchrow_hashref) {
         
            push(@dress, $dre);
        
        }
        $sth->finish;
        if (@dress) {
            $dress[-1]->{last} = 1;
            $hash->{dress} = \@dress;
        }
    }

В $cook->{img_ids} записи хранятся в виде 7687,7688,7689,741,7669,7458 - так вот, как мне сделать перебор каждой записи (главный foreach), но в самом sql запросе использовать каждую запись по очереди, а не вместе.


Ответы (1 шт):

Автор решения: Majestio

Попробуй так, если конечно $cook->{img_ids} ссылка на массив строк:

foreach (@{$cook->{img_ids}}) {
  my @dress = ();
  s/(\d+)/'$1'/g;
  my $sth = $dbh->prepare("SELECT pid FROM imnew WHERE id IN ($_)");
  my $rvs = $sth->execute or die "execute: ".$sth->errstr."\n";
  while (my $dre = $sth->fetchrow_hashref) {
    push(@dress, $dre);
  }
  $sth->finish;
  if (@dress) {
    $dress[-1]->{last} = 1;
    $hash->{dress} = \@dress;
  }
}
→ Ссылка