Автор Тема: Ошибка при выполнении запроса к мусклу  (Прочитано 4148 раз)

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

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
имеется следующая ситуация :
запрос вида

    $dbh 
DBI->connect("DBI:mysql:host=freebsd;database=squid","$operator","$oper_pass")
               or die 
"cann\'t open DB $!";
    
$sth $dbh->prepare("SELECT sum(size)FROM $table_log WHERE ident=\'$role_user\'")
                or die 
"Cann\'t execute select from DB table $!";
    
$sth->execute ();
    
my $size;
    
$size $sth->fetchrow_array();
    
$size $size 0;


Всплывает следующая ошибка при выполнении  $size = $size + 0; Точнее в предыдущей строке, но только при выполнении операции с переменнной она начинает плеваться.
Цитировать

Use of uninitialized value at /usr/local/script/traff_db/bin/lock.pl line 134.

В случае если в таблице отсутствуют записи для $role_user - тобишь результат NULL - в принципе не сильно раздражает, но все же - в логе потом черт ногу сломает
Как перехватить ошибку или почему она возникает и что можно сделать, чтобы ее не было?
Всё будет хорошо - я договорился!

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Ошибка при выполнении запроса к мусклу
« Ответ #1 : 12 Марта 2004, 14:12:47 »
if ($size = $sth->fetchrow_array())
{
    $size = $size + 0;
}
2B OR NOT 2B = FF

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ошибка при выполнении запроса к мусклу
« Ответ #2 : 12 Марта 2004, 14:20:58 »
Спасибо, но ничего не изменилось

    $dbh 
DBI->connect("DBI:mysql:host=freebsd;database=squid","$operator","$oper_pass")
               or die 
"cann\'t open DB $!";
    
$sth $dbh->prepare("SELECT sum(size)FROM $table_log WHERE ident=\'$role_user\'")
                or die 
"Cann\'t execute select from DB table $!";
    
$sth->execute ();
    
my $size;
#    $size = $sth->fetchrow_array();
#    $size = $size + 0;

    
if ($size $sth->fetchrow_array())
    {
        
$size $size 0;
    }

    print 
"$size\\n";



только строка сместилась:
Цитировать

Use of uninitialized value at /usr/local/script/traff_db/bin/lock.pl line 141.
Всё будет хорошо - я договорился!

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ошибка при выполнении запроса к мусклу
« Ответ #3 : 12 Марта 2004, 14:28:18 »
В принципе ошибка выскакивает как только над $size пытаешь провести какое-либо действие, например сравнение....
Всё будет хорошо - я договорился!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Ошибка при выполнении запроса к мусклу
« Ответ #4 : 12 Марта 2004, 14:50:31 »
Use of uninitialized value
           (W) An undefined value was used as if it were already defined.  It
           was interpreted as a "" or a 0, but maybe it was a mistake.  To
           suppress this warning assign an initial value to your variables.
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Ошибка при выполнении запроса к мусклу
« Ответ #5 : 12 Марта 2004, 14:53:49 »
$sth->fetchrow_array() возвращяет список. ты уверен что тебе его в скаляр поместить нужно?
The documentations is your friend

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ошибка при выполнении запроса к мусклу
« Ответ #6 : 12 Марта 2004, 15:30:31 »
Ok, меняю

    my 
@size_1;
    @
size_1 $sth->fetchrow_array();
    while(@
size_1){
    
$size=shift @size_1;
    }

или

    $size
=@size_1[0];
    if (
$size 1){
    
$size=0;
    }
    
$size $size 0;

Ошибка таже. В фишка в том, что ошибк а возникает, только в случае, если не встречается в таблице значение переменной
$role_user - тобишь если возвращается результат обработки запроса NULL:
пример имеется таблица:
Цитировать
mysql> show columns from squid_log_4
    -> ;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| time_stamp | varchar(32) |      | MUL |         |       |
| elaps      | varchar(8)  | YES  |     | NULL    |       |
| client_ip  | varchar(16) | YES  | MUL | NULL    |       |
| type_http  | varchar(24) | YES  |     | NULL    |       |
| size       | int(11)     | YES  | MUL | NULL    |       |
| method     | varchar(8)  | YES  |     | NULL    |       |
| url        | varchar(64) | YES  | MUL | NULL    |       |
| ident      | varchar(32) | YES  | MUL | NULL    |       |
| host_name  | varchar(32) | YES  | MUL | NULL    |       |
| mime       | varchar(16) | YES  |     | NULL    |       |
| chanel     | varchar(16) | YES  | MUL | NULL    |       |
+------------+-------------+------+-----+---------+-------+
11 rows in set (0.01 sec)

mysql>

по ней делается выборка:
Цитировать

mysql> select sum(size) from squid_log_4 where ident=\'svetlana\';
+-----------+
| sum(size) |
+-----------+
|  96839599 |
+-----------+
1 row in set (0.69 sec)


Но если записи пошльзователя нет:
Цитировать

mysql> select sum(size) from squid_log_4 where ident=\'boris\';
+-----------+
| sum(size) |
+-----------+
|      NULL |
+-----------+
1 row in set (0.00 sec)


Так вот ошибка всплывает при выполнении именно последнего рода - тобишь результат подсчета - NULL.
Как мне его схватитть?
Всё будет хорошо - я договорился!

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Ошибка при выполнении запроса к мусклу
« Ответ #7 : 12 Марта 2004, 15:48:46 »
Skif

if ( defined $var ) {
    print "Нам не(!) известно что в переменной, но известно, что она имеет определенное(!) значение";
} else {
    print "Переменная не определенна, а это значит работать нам не с чем, если все таки попытаемся, то получим вполне заслуженное предупреждение";
}

perldoc -f defined

ps: null в mysql это тоже что и undef в perl (при использовании DBI), т.е. ничего.
0 OK, 0:1

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Ошибка при выполнении запроса к мусклу
« Ответ #8 : 12 Марта 2004, 15:51:48 »
Skif

my $row 
$sth -> rows;
if (
$row 0) {
# Результаты запроса - есть
}
else {
# Результатов запроса - нет
}

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ошибка при выполнении запроса к мусклу
« Ответ #9 : 12 Марта 2004, 15:55:16 »
Оно(тобишь define), огромное спасибо!
;)))
Всё будет хорошо - я договорился!

 

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