Buenas noches a todos.
Regresé.. estaba ocupado en otras cosas pero he vuelto con una pregunta. No se si alguno de ustedes maneja perl, sin embargo mi inquietud es:
¿como puedo extraer de una base de datos Mysql Varias filas con un conector.pl en perl?
Ya puedo extraer los datos con una variable que locupa un ID como mi cedula, sin embargo, solo consulta la primera fila de la tabla.
pero no consulta las demas filas.
Este es mi conector en perl, mi BDD y mi sentencia en asterisk:
-----------connector--------------------------------
#!/usr/bin/perl
use strict;
use Asterisk::AGI;
use DBI;
my $AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
my $cedula = $AGI->get_variable('CEDULA');
my $dbh = DBI>connect("DBI:mysql:host=localhost;database=bas e ;port=3306","astuser","astpass",$DBI::rows)
or die "Error en la conexion: $DBI::errstr";
my $sth = $dbh->prepare('SELECT nombre,materia,nota, FROM alumno WHERE cedula = ?');
$sth->execute($cedula)
or die("Error en la consulta");
my ($nombre,$materia,$nota) = $sth->fetchrow_array();
$AGI->set_variable('NOMBRE', "$nombre");
$AGI->set_variable('MATERIA', "$materia");
$AGI->set_variable('NOTA', "$nota");
$sth->finish;
$dbh->disconnect;
----------------------------------------BDD-------------------------------------
mysql> select * from alumno;
+------------+----------------+----------------------------+------+--------------+-
| cedula | nombre | materia | nota | adicional |
+------------+----------------+----------------------------+------+--------------+-
| 1724310931 | Eric Alarcon | Tesis | 10 | |
| 1234567890 | Ramiro Meneses | Calculo 1 | 9 | |
| 1234567890 | Ramiro Meneses | Sistemas de Comunicaciones | 8.5 | |
+------------+----------------+----------------------------+------+---------------+-
3 rows in set (0.00 sec)
mysql>
----------------------Asterisk----------------
[interno]
exten => s,1,Answer()
exten => s,n,Set(COUNT=1)
exten => s,n,WaitExten(1)
exten => s,n,Background(Grabacion/Bienvenida 8k)
exten => s,n,Background(Grabacion/Cedula 8K)
exten => s,n,WaitExten(5)
exten => _XXXXXXXXXX,1,Set(CEDULA=${EXTEN})
exten => _XXXXXXXXXX,n,Agi(myconnector.pl)
exten => _XXXXXXXXXX,n,Festival(${NOMBRE})
exten => _XXXXXXXXXX,n,Goto(menu,s,1)
exten => s,n,WaitExten(2)
--------------------------------------------
Como el fetchrow acumula los datos, he intentado volver a llamarlo despues del $sth->finish; pero me sigue llamando solo 1 fila y como tengo varias materias, entonces no me sirve para una consulta total de mis notas.
Encontré en esta pagina una clave con while, pero no me resulta al intentarlo, http://www.tizag.com/perlT/perlmysqlquery.php
En sintesis dice que se pueden extraer datos de varias filas seguidas con un While. Si la consulta tiene por objeto devolver varias filas, FetchRow () debe ser llamada una y otra vez. Esto se logra fácilmente con un bucle while y da el siguiente ejemplo:
# DEFINE A MySQL QUERY
$myquery = "SELECT * FROM $tablename";
# EXECUTE THE QUERY FUNCTION
$execute = $connect->query($myquery);
# HTML TABLE
print "<table border='1'><tr>
<th>id</th>
<th>product</th>
<th>quantity</th></tr>";
# FETCHROW ARRAY
while (@results = $execute->fetchrow()) {
print "<tr><td>"
.$results[0]."</td><td>"
.$results[1]."</td><td>"
.$results[2]."</td></tr>";
}
print "</table>";
Pero al colocarlo de una forma similar, utilizando el while, no me lo permite, lo que hago ahora es esto:
my ($nombre,$materia,$nota);
while(($nombre,$materia,$nota) = $sth->fetchrow_arrayref()) {
print join (", ", $materia,$nota),"\n";
}
$AGI->set_variable('NOMBRE', "$nombre");
$AGI->set_variable('MATERIA', "$materia");
$AGI->set_variable('NOTA1', "$nota");
$sth->finish;
$dbh->disconnect;
Tambien me baso en esta pagina que si habla de perl pero tampoco me da resultados: http://www.easysoft.com/developer/langu ... art_2.html
No soy el mejor programador, pero en serio necesito una guia o una luz, porque he consultado con algunos compañeros y tampoco damos con el chiste.
Agradezco sus comentarios. :shock:
Regresé.. estaba ocupado en otras cosas pero he vuelto con una pregunta. No se si alguno de ustedes maneja perl, sin embargo mi inquietud es:
¿como puedo extraer de una base de datos Mysql Varias filas con un conector.pl en perl?
Ya puedo extraer los datos con una variable que locupa un ID como mi cedula, sin embargo, solo consulta la primera fila de la tabla.
pero no consulta las demas filas.
Este es mi conector en perl, mi BDD y mi sentencia en asterisk:
-----------connector--------------------------------
#!/usr/bin/perl
use strict;
use Asterisk::AGI;
use DBI;
my $AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
my $cedula = $AGI->get_variable('CEDULA');
my $dbh = DBI>connect("DBI:mysql:host=localhost;database=bas e ;port=3306","astuser","astpass",$DBI::rows)
or die "Error en la conexion: $DBI::errstr";
my $sth = $dbh->prepare('SELECT nombre,materia,nota, FROM alumno WHERE cedula = ?');
$sth->execute($cedula)
or die("Error en la consulta");
my ($nombre,$materia,$nota) = $sth->fetchrow_array();
$AGI->set_variable('NOMBRE', "$nombre");
$AGI->set_variable('MATERIA', "$materia");
$AGI->set_variable('NOTA', "$nota");
$sth->finish;
$dbh->disconnect;
----------------------------------------BDD-------------------------------------
mysql> select * from alumno;
+------------+----------------+----------------------------+------+--------------+-
| cedula | nombre | materia | nota | adicional |
+------------+----------------+----------------------------+------+--------------+-
| 1724310931 | Eric Alarcon | Tesis | 10 | |
| 1234567890 | Ramiro Meneses | Calculo 1 | 9 | |
| 1234567890 | Ramiro Meneses | Sistemas de Comunicaciones | 8.5 | |
+------------+----------------+----------------------------+------+---------------+-
3 rows in set (0.00 sec)
mysql>
----------------------Asterisk----------------
[interno]
exten => s,1,Answer()
exten => s,n,Set(COUNT=1)
exten => s,n,WaitExten(1)
exten => s,n,Background(Grabacion/Bienvenida 8k)
exten => s,n,Background(Grabacion/Cedula 8K)
exten => s,n,WaitExten(5)
exten => _XXXXXXXXXX,1,Set(CEDULA=${EXTEN})
exten => _XXXXXXXXXX,n,Agi(myconnector.pl)
exten => _XXXXXXXXXX,n,Festival(${NOMBRE})
exten => _XXXXXXXXXX,n,Goto(menu,s,1)
exten => s,n,WaitExten(2)
--------------------------------------------
Como el fetchrow acumula los datos, he intentado volver a llamarlo despues del $sth->finish; pero me sigue llamando solo 1 fila y como tengo varias materias, entonces no me sirve para una consulta total de mis notas.
Encontré en esta pagina una clave con while, pero no me resulta al intentarlo, http://www.tizag.com/perlT/perlmysqlquery.php
En sintesis dice que se pueden extraer datos de varias filas seguidas con un While. Si la consulta tiene por objeto devolver varias filas, FetchRow () debe ser llamada una y otra vez. Esto se logra fácilmente con un bucle while y da el siguiente ejemplo:
# DEFINE A MySQL QUERY
$myquery = "SELECT * FROM $tablename";
# EXECUTE THE QUERY FUNCTION
$execute = $connect->query($myquery);
# HTML TABLE
print "<table border='1'><tr>
<th>id</th>
<th>product</th>
<th>quantity</th></tr>";
# FETCHROW ARRAY
while (@results = $execute->fetchrow()) {
print "<tr><td>"
.$results[0]."</td><td>"
.$results[1]."</td><td>"
.$results[2]."</td></tr>";
}
print "</table>";
Pero al colocarlo de una forma similar, utilizando el while, no me lo permite, lo que hago ahora es esto:
my ($nombre,$materia,$nota);
while(($nombre,$materia,$nota) = $sth->fetchrow_arrayref()) {
print join (", ", $materia,$nota),"\n";
}
$AGI->set_variable('NOMBRE', "$nombre");
$AGI->set_variable('MATERIA', "$materia");
$AGI->set_variable('NOTA1', "$nota");
$sth->finish;
$dbh->disconnect;
Tambien me baso en esta pagina que si habla de perl pero tampoco me da resultados: http://www.easysoft.com/developer/langu ... art_2.html
No soy el mejor programador, pero en serio necesito una guia o una luz, porque he consultado con algunos compañeros y tampoco damos con el chiste.
Agradezco sus comentarios. :shock:
Comentario