The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"perl Mysql to DBI trafd"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"perl Mysql to DBI trafd"  
Сообщение от Happy_demon email(ok) on 03-Мрт-08, 17:37 
Доброе время есть всем известный набор скриптов для trafd. например тут http://www.tmeter.ru/misc/trafd/ всё чудестно, всё работало до недавнего времени. поставил новый сервак. смотрю - не отрабатывают скрипты. запускаю их последовательно вручную. дохожу до скрипта заброса в базу - ругается не может найти модуль Mysql. захожу в порты, говорю - давай поставим - говорит, что этот модуль конфликтует с уже установленным p5-DBD-mysql41-4.005 - этого сносить не хочется, ибо уже всё работает, кроме трафд. ладно, говорю. давай тогда не use Mysql, а use DBI - почти всё отрабатывает (ну там немного интерфейс модуля другой, но там не сложно) и спотыкается только на строчке
#!/usr/bin/perl
use Mysql;

$plain_path='/usr/local/var/traffic_plain/';
$yesterday=`date -v-1d '+%Y%m%d'`;
chomp($yesterday); $full_path=$plain_path.$yesterday.".ed0";

$dbh = Mysql->Connect("","ipacc");
$del_query="delete from yesterday;";
$dbh->Query($del_query);

спотыкается собственно на последних 2-х строках, а именно - на последней, говорит, что
Can't call method "Query" on an undefined value at ./db_step1.pl line 19. собственно вопрос - что эта строка делает и как её переделать для работы с модулем DBI? заранее спасибо

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "perl Mysql to DBI trafd"  
Сообщение от angra (ok) on 03-Мрт-08, 23:24 
Вызов внешнего date, отсутствие проверок возвращаемых значений, использование obsolete модуля - лично я бы поостерегся использовать такие скрипты, может стоит поискать более вменяемые варианты.
Но если очень хочется, то всегда можно поставить модуль Mysql в каталог с этими скриптами, а не в системные директории. Это проще чем править код.
Ну и непосредственно на ваш вопрос. "delete from yesterday;" удаляет все из таблицы yesterday. В DBI лучше передавать через do, так как не является select запросом. Для select запросов используется prepare+execute.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "perl Mysql to DBI trafd"  
Сообщение от Happy_demon email(ok) on 05-Мрт-08, 16:54 
>Вызов внешнего date, отсутствие проверок возвращаемых значений, использование obsolete модуля - лично
>я бы поостерегся использовать такие скрипты, может стоит поискать более вменяемые
>варианты.
>Но если очень хочется, то всегда можно поставить модуль Mysql в каталог
>с этими скриптами, а не в системные директории. Это проще чем
>править код.

Спасибо. но если кто не захотел последовать этому совершенно справедливому совету, то вот приблизительно как должны выглядеть эти скрипты для DBI
#!/usr/bin/perl
use DBI;
use strict;
my $plain_path='/usr/local/var/traffic_plain/';
my $yesterday=`date -v-1d '+%Y%m%d'`;
chomp($yesterday);
my $full_path=$plain_path.$yesterday.".em0";

my $dbh = DBI->connect('DBI:mysql:база:localhost:3306','юзер_БД','пароль');
my $del_query=$dbh->prepare("delete from yesterday;");
$del_query->execute;

дальше по аналогии. а установка модуля в данную папку не помогла, к сожалению. на сам модуль скрипт перестал ругаться, но стал ругаться на какой-то другой, лежащий к тому же в системных путях. так что пришлось посмотреть DBI API. спасибо за помощь!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру