[УЖЕ НЕ НАДО] perl + mysql помогите плз найти в чём грабли..

Alena_08_11

Первый раз в жизни пишу что либо на перл и с mysql особо не дружу ....
не работает примерно такой кусок:

.......
my $dbh = DBI->connect("DBI:mysql:database=".$mysql_dbname.";host=".$musql_host, $mysql_user, $mysql_password) || die $DBI::errstr;
my $query = "select user from ......."; #априори считаем, что текст запроса корректен
my $result = $dbh->prepare($query);
$result->execute || die $DBI::db_errstr;
my @users = ;
while($r = $result->fetchrow_array
{
push(@users, [$r]);
}
....

выдаёт ошибку
DBD::mysql::st fetchrow_array failed: fetch without execute at ... // в строчке while($r = $result->fetchrow_array
Гуглю уже часа 2, часто нахожу что у людей всё было нормально, а потом хлоп после обновления такая же ошибка. В чём трабла - пока найти не могу. Во многих примерах которые нашёл - пишется именно так.

evgen5555

Области видимости переменных тщательно проверить

Alena_08_11

эммм
поскрипел мозгами
погуглил на тему областей видимости и перл ...
убрал все my
всё равно та же хрень :)
...
можно поподробнее плз ? :)

Alena_08_11

запрос таки оказался неправильным :)
и ещё кое какие ашипки в коде.
ps. perl - жесть
ps2. Если вдруг кто то всё же ещё сюда заглянет. После того как я скормил вывод "print $query" в mysql клиент - то получил ошибку. Запрос я конечно исправил и ща всё работает, но почему у меня скрипт при выполнении не die-кался из строчки

$result->execute || die $DBI::errstr;

eduard615

Потому что ошибка была обнаружена еще в prepare :)

Geddi-S

кстати, в случае с die все же предпочтительнее использовать or вместо || (в силу более низкого приоритета - напр., ниже чем у оператора присваивания)
Оставить комментарий
Имя или ник:
Комментарий: