[SP-pm] Ajuda com módulo DBI::mysql e funcoes.

jefferson alexandre jefferson.alexandre at gmail.com
Sat Mar 13 06:21:34 PST 2010


Bom dia a todos.
Primeiramente, gostaria de parabenizar aos membros da lista pela educação e
respeito com os usuários, independente do nível de conhecimento.  É legal
ver que ainda existem listas nacionais que vale a pena frequentar, e esta é
uma delas. :D

Recentemente, consegui introduzir o perl no meu ambiente de trabalho,
criando algumas ferramentas para manutenção e administração de servidores
Asterisk. (PABX IP Open Source.)
Eu tenho pouca ou quase nenhuma experiência com programação. No máximo,
alguns scripts shell que estão sendo devidamente portados/reescritos em
Perl.

Eu criei uma rotina para o Asterisk para que, quando um usuário disparar uma
ligação, meu script ira consultar o numero digitado pelo usuário com uma
base de dados mysql, e então, mediante resultado, ira passar o controle de
volta para o asterisk, para que ele complete ou não a ligação. Essa solução
será instalada em Callcenters de São Paulo para cumprir esta lei:
http://www.procon.sp.gov.br/noticia.asp?id=934


O meu problema é, que independente do numero passado pelo asterisk, meu
script sempre retorna 0 para a função &consulta_banco, e acaba bloqueando a
ligação.
Eu acredito que poderia resolver isso comparando o valor de $var em um if,
mas eu gostaria de entender como resolver isso apenas usando o retorno da
função, se este for o modo correto de fazer isso.

Abaixo, o código:

++ Begin Code ++
#!/usr/bin/perl -w

use DBI();
use Asterisk::AGI;
$AGI = new Asterisk::AGI;

($database, $host, $user, $pw) = qw( procon 127.0.0.1 usuario senha );
#Obter numero discado  via AGI. Deve retornar algo como (01112345678) ;
$EXTEN = $AGI->get_variable('EXTEN') ;


if ( &consulta_banco($EXTEN) )  {
 #Colocando o valor "1" na variavel FORBIDEN, que será tratada pelo
asterisk, e imprimindo na tela.
        $AGI->set_variable("FORBIDEN", "1");
 $AGI->verbose("Numero consta na lista do Procon-SP") ;
}
else {
$AGI->set_variable("FORBIDEN", "0") ;
 $AGI->verbose("Executando ligacao para $EXTEN") ;
}

#Consultando banco de dados.
sub consulta_banco {
 $dbh = DBI->connect("DBI:mysql:database=$database;host=$host", $user, $pw )
 || die print $DBI::errstr;
         $dbh->{RaiseError} = 1;
 $sth = $dbh->prepare(" SELECT numero FROM numeros WHERE numero LIKE
\"%$_[0]%\" ");
         $sth->execute() ;
}

++ End Code ++
Obrigado,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100313/61905b16/attachment.html>


More information about the SaoPaulo-pm mailing list