Здравствуйте!
Имеется текстовый файл с данными о сотрудниках нескольких предпирятий. Примерно такого вида.
Воробьянинов|Ипполит|Матвеевич|Kisa@somethere.ru|заготовитель|Рога и Копыта|222-222|
.....
Имеется скрипт для поиска в этом файле.
вот кусок кода:
<-----------
#!/usr/bin/perl
use DBI;
use CGI qw(:all);
use CGI::Carp qw(fatalsToBrowser);
#
$q =new CGI;
$sfam=$q->param(\'fam\');
$sim=$q->param(\'im\');
$sotch=$q->param(\'otch\');
$semail=$q->param(\'email\');
$sdolz=$q->param(\'dolz\');
$sorg=$q->param(\'org\');
$stel=$q->param(\'tel\');
$sfax=$q->param(\'fax\');
chomp($sfam, $sim, $sotch, $semail, $sdolz, $sorg, $stel, $sfax);
my $dbh = DBI->connect("DBI:CSV:f_dir=/tmp;");
$dbh->{\'csv_tables\'}->{\'addrb\'} = {
\'eol\' => "\\n",
\'sep_char\' => "|",
\'quote_char\' => undef,
\'escape_char\' => undef,
\'file\' => "$ab",
\'col_names\' => ["num", "email", "fam","im", "otch", "dolz", "org",
"addr", "tel", "fax", "filo"]
};
my $output = $dbh->prepare("SELECT * FROM addrb
WHERE org RLIKE \'$sorg\'
AND (im RLIKE \'$sim\' AND fam RLIKE \'$sfam\')
");
while(($num, $email, $fam, $im, $otch, $dolz, $org, $addr, $tel, $fax, $filo)=$output->fetchrow_array) {
print "$num $fam $im $otch
$email
$dolz
$org
$tel
$fax
";
}
$output->finish();
----------->
Помогите разобраться со след. вопросами.
Вопрос 1. Где можно взять описание модулей DBI-, DBD-CSV на русском и желательно с примерами.
Вопрос 2. Какие регулярные выражения можно использовать в запросах (кроме %).
Вопрос 3. Если в запросе (SELECT * FROM addrb WHERE fam RLIKE \'$sfam\') я пишу REGEXP вместо RLIKE получаю:
<--
Thu Nov 20 12:25:51 2003] 1addr.pl: SQL ERROR: Bad predicate: \'org REGEXP ?0?\'!
[Thu Nov 20 12:25:51 2003] 1addr.pl:
[Thu Nov 20 12:25:51 2003] 1addr.pl: SQL ERROR: Couldn\'t find predicate!
[Thu Nov 20 12:25:51 2003] 1addr.pl:
SV = RV(0x1ffac0) at 0x42fe40
REFCNT = 1
FLAGS = (PADBUSY,PADMY,ROK)
RV = 0x54bbc0
[Thu Nov 20 12:25:51 2003] 1addr.pl: DBD::CSV::st execute failed: dbih_getcom ha
ndle DBD::CSV::Statement=HASH(0x54bbc0) is not a DBI handle (has no magic) at /u
sr/local/lib/perl5/site_perl/5.6.1/SQL/Statement.pm line 164.
[Thu Nov 20 12:25:51 2003] 1addr.pl: DBD::CSV::st fetchrow_array failed: Attempt
to fetch row from a Non-SELECT statement at /var/www/cgi-bin/1addr.pl line 157.
-->
Вопрос 4. По SQL.
По запросу
("SELECT * FROM addrb
WHERE org RLIKE \'$sorg\'
AND (im RLIKE \'$sim\' AND fam RLIKE \'$sfam\')
");
выбирается строго, если только заполнены поля fam и im.
Как написать запрос чтобы:
а) Выбирал всех сотрудников предприятия, если в форме не было заполнено ни одного поля кроме "org" (оно заполняется в любом случае).
б) Выбирал сотрудника предприятия по любому из заполненых полей.
Заранее благодарен.