Ты выглядишь очень, очень растерянным.Я не думаю, что вы на самом деле показывает нам код, который вы запускаете.Посмотрите на этот код:
my $data = $DBH->prepare("SELECT SND.userid, SND.firstname,
SND.lastname
FROM msg as M
JOIN users as SND
ON SND.userid = M.msg_from
WHERE M.msg_to = ?
AND M.received IS NULL");
$data->execute($janedeo_id);
while (my $row = $data->fetchrow_hashref) {
foreach $row ( @$data) {
($userid, $snd_firstname, $snd_lastname,
$snd.age, $snd.city, $snd.country) = @$data;
}
}
Это ваш первый пример кода - код, который, как вы заявляете, работает.Но это не может сработать.
У вас есть переменная с именем $data
, которая содержит ваш дескриптор оператора DBI (я знаю это, потому что он возвращается из вызова $DBH->prepare()
).Было бы более обычно вызывать эту переменную $sth
.
. Вы правильно вызываете execute()
для этого объекта, а затем начинаете вызывать fetchrow_hashref()
в цикле.Вы храните хеш-ссылку, которую вы получаете, в переменной с именем $row
.Пока все хорошо.
Но тогда все идет не так.
Вы игнорируете имеющуюся у вас ссылку на хэш и перезаписываете ее данными, хранящимися в $data
.Но в $data
нет данных - это дескриптор оператора.Вы рассматриваете его как ссылку на массив (@$data
), но это не ссылка на массив, поэтому это приведет к фатальной ошибке времени выполнения.
Затем вы игнорируете второе значение, которое вы поместили в $row
, и переключаетесь наиспользование отдельных переменных, по-видимому, для хранения данных, которые вы возвращаете из базы данных.Еще раз, вы рассматриваете $data
как ссылку на массив, и снова, это не будет работать и вызовет фатальную ошибку времени выполнения.Да, и вы используете имена переменных (например, $snd.age
), которые недопустимы в Perl и которые почти наверняка приведут к синтаксической ошибке.
Утверждая, что этот код работает, вы тратите впустуювремя.Не работаетЭто даже не компилируется.Мы очень рады помочь людям здесь, но вам нужно показать нам реальный код, который мы можем запустить.
Я не знаю, каков ваш опыт программирования.Но чтобы добиться успеха в этой карьере, вам придется уделять гораздо больше внимания деталям.