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

Jorge Augusto Senger jasenger at gmail.com
Sat Mar 13 06:46:49 PST 2010


Jefferson,

Retornar o número de linhas da query deve resolver seu problema.
Para isto, use o método rows do DBI:

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() ;
         return $sth->rows;
}

Jorge Augusto Senger
jasenger (at) gmail.com

use Perl;


2010/3/13 jefferson alexandre <jefferson.alexandre em gmail.com>

> 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,
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100313/11906c17/attachment.html>


More information about the SaoPaulo-pm mailing list