Автор Тема: Потеря переменной после отработки цикла while  (Прочитано 15151 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
koliama
perldoc strict


А еще для начала выведи на экран свой запрос:

print "SELECT sum(fsize)/1024/1024 AS Summa FROM $table;";

после чего перепиши его с экрана в MySQL manager и попробуй выполнить... посмотри результат...

потом как сказал NeoNox читаем ман по DBI:
Как не странно, fetchrow_array возвращает массив, но никак не переменную (array - ничего не говорит???), попытка приравнять переменную к массиву приводит к тому то возвращается количество элементов(!) массива, в данном случае 1. То что конструкция
Цитировать
my $summa = ($sth->fetchrow_array)[0];
выводит ссылку на массив ("что-то типа" - это ссылка) - ошибка...

Курим доки...

Оффлайн koliama

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 35
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Phoinix
Ессно такая конструкция работать не будет. Если ее набирать в консоли или через MySql Front например ...
Но в cgi скрипте она отрабатывает. Я вчера весь вечер переводил perldoc DBI - еще раз повторюсь - явно нигде не сказано, что ; ставить нельзя.
Тем более что в моем скрипте такая конструкция работает и прагма strict на нее не указывает (как на ошибку)
Насчет возвращения количества элементов массива ты тоже не прав. Строка
my $summa = ($sth->fetchrow_array)[0];
присваевает переменной именно значение первого элемента массива...
vladsu
А как можно в асю стукнуться? В смысле, где номер взять?

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
koliama
[OFF]У меня складывается впечатление, что автор сам не понимает что делает...[/OFF]
Цитировать
Кстати с вашим вторым советом
my $summa = ($sth->fetchrow_array)[0];
не работает.
выдает что-то типа
$summa = Array(0x........)


Вот это что-то типа выдавать должно не ссылку на массив, а элемент оного, ARRAY(xxxx) - есть ссылка на массив...

Цитировать
Ессно такая конструкция работать не будет. Если ее набирать в консоли или через MySql Front например ...
Но в cgi скрипте она отрабатывает. Я вчера весь вечер переводил perldoc DBI - еще раз повторюсь - явно нигде не сказано, что ; ставить нельзя.


Какая конструкция??? Поробуй выполнить свой запрос не в скрипте, а консоли и посмотри результат... При этом сначала выведи запрос на экран, причем в том месте скрипта где ты его пытаешься выполнить!
90% вероятность того что переменная $table у тебя не определена! Соответственно запрос не верен! Но конечно, логи ошибок, мы так и не удосужились посмотреть и увидеть свою ошибку!

еще раз рекомендуется использовать strict, а в идеале еще и warning (-w)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28