Tengo un problema cuando ejecuto el comando execute
Publicado: 2012-09-01 21:41 @945
Voy a platicar del tema: cuando ejecuto el comando execute en uno de mis programas me dice que la sintaxis está mal. Le he buscado pero no le encuentro. No sé si alguien pudiera ayudarme.
Estoy manejando una base de datos MySQL, la cual le inserto registros y los actualizo, pero cuando los selecciona y trata de ejecutar el módulo execute me da problemas.
Este programa funciona bien:
Este programa termina mal:
El error que manda el print() es este:
Si ejecuto el primer programa corre bien, pero con este que tiene o está modulado, no.
El módulo execute corre bien en otra parte del programa, porque sí inserto los registros, pero, como vuelvo a repetir, cuando los desea imprimir los selecciona y no funciona.
¿Alguien habrá que sepa o que me dé un hilo? Le incluí que primero desconectara, para saber si ese era el problema, pero no.
Si le digo directamente la llave, en el módulo select:db2:
my $comando_db="select * from Mundo where Mundo=8;";
me da el error de que no hay registros:
Si ejecuto los comando directamente desde la terminal me da lo siguiente:
Gracias.
Estoy manejando una base de datos MySQL, la cual le inserto registros y los actualizo, pero cuando los selecciona y trata de ejecutar el módulo execute me da problemas.
Este programa funciona bien:
Using perl Syntax Highlighting
- #!/usr/bin/perl -w
- use strict;
- use DBI;
- # Variables
- my $str = shift || &asigna_variable;
- my $username = '***********';
- my $password = '********';
- my $database = '********';
- my $server = '**********';
- my $fin;
- # Remove end-of-line from input
- chomp $str;
- my ($palabra_a,$campo,$tipo,$valor1,$valor2)=split(/\=/,$str);
- my $table="Variables";
- my $campo_1="Variable";
- my $campo_2="Indicador";
- my $campo_3="Valor_Alf";
- my $campo_4="Valor_Num";
- my $comando_db="select * from Mundo where Mundo=8;";
- # Get the rows from database
- my $dbh = DBI->connect("DBI:mysql:$database;host=$server", $username, $password) || die "Could not connect to database: $DBI::errstr";
- my $sth = $dbh->prepare($comando_db) || die "$DBI::errstr";
- #$sth->bind_param(1, "%$str%");
- $sth->execute();
- # Print number of rows found
- if ($sth->rows < 0) {
- print "Sorry, no domains found.\n";
- } else {
- printf ">> Found %d domains\n", $sth->rows;
- # Loop if results found
- while (my $results = $sth->fetchrow_hashref) {
- my $mundo = $results->{Mundo}; # get the domain name field
- my $numero_pueblos = $results->{Numero_Pueblos}; # get the URL field
- my $indicador = $results->{Indicador}; # get the URL field
- my $monedas = $results->{Monedas}; # get the URL field
- printf " +--- \e[1;42m %s (%s)\e[0m\n", $mundo, $numero_pueblos, $indicador, $monedas;
- }
- }
- exit;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Este programa termina mal:
Using perl Syntax Highlighting
- sub select_db2
- {
- print "$year/$mon/$mday:$hour:$min:select_db2 entra \n";
- my $dbh=$_[$numero_0];
- my $table=$_[$numero_1];
- my $where=$_[$numero_2];
- &desconecta_db2($dbh);
- my $dbh=&conecta_db2;
- my $comando_db="select * from $table $where;";
- print "################################################################ \n";
- print "$comando_db \n";
- print "################################################################ \n";
- my $sth = $dbh->prepare("$comando_db") || die "$DBI::errstr";
- my $status=$sth->execute();
- if(!defined $status)
- {
- print "################################################################\n";
- print "$year/$mon/$mday:$hour:$min:$table:ERROR:$DBI::errstr \n";
- print "################################################################\n";
- $status=$numero_1;
- exit;
- }
- }
- sub desconecta_db2
- {
- print "$year/$mon/$mday:$hour:$min:desconecta_db2 entra \n";
- my $dbh=$_[$numero_0];
- # Disconnect
- #$sth->finish;
- $dbh->disconnect;
- }
- sub conecta_db2
- {
- print "$year/$mon/$mday:$hour:$min:conecta_db2 entra \n";
- my $dbh = DBI->connect("DBI:mysql:$al;host=$am", $ak, $an) || die "Could not connect to database:$DBI::errstr";
- print "$dbh \n";
- return($dbh);
- }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
El error que manda el print() es este:
Using text Syntax Highlighting
- 2012/9/1:21:3:carga_db2 entra
- 2012/9/1:21:3:select_mundo entra
- 2012/9/1:21:3:select_db2 entra
- 2012/9/1:21:3:desconecta_db2 entra
- 2012/9/1:21:3:conecta_db2 entra
- DBI::db=HASH(0x9fcd8c8)
- ################################################################
- select * from Guerras.Mundo where Mundo=RL must be absolute
- Content-Type: text/plain
- Client-Date: Sun, 02 Sep 2012 02:03:59 GMT
- Client-Warning: Internal response
- 400 URL must be abs;
- ################################################################
- ################################################################
- 2012/9/1:21:3:Guerras.Mundo:ERROR:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'must be absolute
- Content-Type: text/plain
- Client-Date: Sun, 02 Sep 2012 02:03:59' at line 1
- ################################################################
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Si ejecuto el primer programa corre bien, pero con este que tiene o está modulado, no.
El módulo execute corre bien en otra parte del programa, porque sí inserto los registros, pero, como vuelvo a repetir, cuando los desea imprimir los selecciona y no funciona.
¿Alguien habrá que sepa o que me dé un hilo? Le incluí que primero desconectara, para saber si ese era el problema, pero no.
Si le digo directamente la llave, en el módulo select:db2:
my $comando_db="select * from Mundo where Mundo=8;";
me da el error de que no hay registros:
Using text Syntax Highlighting
- 2012/9/1:21:48:carga_db2 entra
- 2012/9/1:21:48:select_mundo entra
- 2012/9/1:21:48:select_db2 entra
- 2012/9/1:21:48:desconecta_db2 entra
- 2012/9/1:21:48:conecta_db2 entra
- DBI::db=HASH(0xa0dd9a8)
- ################################################################
- select * from Mundo where Mundo=8;
- ################################################################
- 1|DBI::st=HASH(0xa0ddc48)
- 1|DBI::st=HASH(0xa0ddc48)
- 2012/9/1:21:48:imprime_mundo entra
- >> Found 0 Guerras.Mundo
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Si ejecuto los comando directamente desde la terminal me da lo siguiente:
Using mysql Syntax Highlighting
- mysql> select * from Guerras.Mundo where Mundo=8;
- +-------+----------------+-----------+---------+-------------------+
- | Mundo | Numero_Pueblos | Indicador | Monedas | Monedas_Generadas |
- +-------+----------------+-----------+---------+-------------------+
- | 8 | 0 | 1 | 0 | 0 |
- +-------+----------------+-----------+---------+-------------------+
- 1 row in set (0.08 sec)
- mysql>
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Using mysql Syntax Highlighting
- mysql> describe Guerras.Mundo;
- +-------------------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------------------+-------------+------+-----+---------+-------+
- | Mundo | varchar(10) | NO | PRI | NULL | |
- | Numero_Pueblos | int(11) | YES | | NULL | |
- | Indicador | tinyint(1) | YES | | NULL | |
- | Monedas | int(11) | YES | | NULL | |
- | Monedas_Generadas | int(11) | YES | | NULL | |
- +-------------------+-------------+------+-----+---------+-------+
- 5 rows in set (0.21 sec)
- mysql>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Gracias.