PERL SQL запрос
print Dumper $turu;
$VAR1 = [ '40', '41', '43', '44', '45' ];
Дампер показывает верные данные. Делаю запрос
my @items = ();
my $sth = $dbh->prepare("SELECT * FROM catn WHERE id IN (?) ");
my $rvs = $sth->execute($turu) or die "execute: ".$sth->errstr."\n";
while (my $item = $sth->fetchrow_hashref) {
push(@items, $item);
}
$hash->{items} = \@items;
Пустота. Ответа нет.
Делаю запрос иначе - вставляю $turu сразу в запрос.
my @items = ();
my $sth = $dbh->prepare("SELECT * FROM catn WHERE id IN ($turu) ");
my $rvs = $sth->execute() or die "execute: ".$sth->errstr."\n";
while (my $item = $sth->fetchrow_hashref) {
push(@items, $item);
}
$hash->{items} = \@items;
Получаю ошибку execute: execute command denied to user 'name'@'%' for routine 'name.ARRAY'
Если в запрос просто подставить '40', '41', '43', '44', '45' - все работает, конечно. Прав на сервере у меня нет, чтобы исправить command denied.
Ответы (1 шт):
Автор решения: Кирилл Новгородцев
→ Ссылка
Выше правильно подсказали, надо объеденить значения:
my @items = ();
my $sth = $dbh->prepare("SELECT * FROM catn WHERE id IN (?) ");
my $rvs = $sth->execute(join(",", @$turu)) or die "execute: ".$sth->errstr."\n";
while (my $item = $sth->fetchrow_hashref) {
push(@items, $item);
}
$hash->{items} = \@items;
Иначе в качестве значения прилетает ссылка на массив, сам запрос получается не корректным и возвращает пустое значение.