• Publicidad

Perl Mysql

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Perl Mysql

Notapor PkoHimself » 2012-05-13 14:04 @628

Hola, perleros. Soy Paco y soy algo nuevo en esto de la programación en Perl. He andado vuelto loco en la red buscando una solución a este problema. Ojalá alguien me pudiera ayudar...

Yo utilizo una base de datos creada en localhost y tengo el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use DBI;
  4. use DBD::mysql;
  5.  
  6. print "Ingresa el query: ";
  7. $query = <STDIN>;
  8. my $roux;
  9. my $t = 0;
  10. my $dbh = DBI->connect( 'DBI:mysql:Database;host=127.0.0.1', 'root', '' )
  11.     || die "Unable to connect to database Baseball @ localhost";
  12. print "Everything looks fine..\n";
  13. $sql = "Select * from Regulations WHERE Regulate='$query'";
  14. $sth = $dbh->prepare($sql);
  15. $sth->execute or die "SQL Error: $DBI::errstr\n";
  16.  
  17. while ( @row = $sth->fetchrow_array ) {
  18.     print "@row\n";
  19. }
  20.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Mas, sin embargo, lo que no logro realizar, (o comprender cómo realizarlo) es cómo ingresar un parámetro al select $sql = "Select * from Regulations WHERE Regulate='$query'"; ya que si le quito la variable funciona perfectamente. Les agradecería su ayuda (:
Última edición por explorer el 2012-05-13 14:16 @636, editado 1 vez en total
Razón: Formateado de código con Perltidy y poner marcas Perl
PkoHimself
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-05-13 13:58 @624

Publicidad

Re: Perl Mysql

Notapor explorer » 2012-05-13 14:21 @639

Bienvenido a los foros de Perl en Español, PkoHimself.

Yo creo que el problema es que no le quitas el carácter de fin de línea, a $query.

Pon esta línea:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. chomp $query;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Una opción mejor es usar placeholder, que hace tu programa muchísimo más seguro:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use DBI;
  3.  
  4. print "Ingresa el query: ";
  5. chomp(my $query = <STDIN>);
  6.  
  7. my $dbh = DBI->connect( 'DBI:mysql:Database;host=127.0.0.1', 'root', '' )
  8.         or die 'Unable to connect to database Baseball @ localhost';
  9. print "Everything looks fine..\n";
  10.  
  11. my $sql = 'Select * from Regulations WHERE Regulate=?';
  12. $sth = $dbh->prepare($sql);
  13. $sth->execute($query)
  14.         or die "SQL Error: $DBI::errstr\n";
  15.  
  16. while ( my @row = $sth->fetchrow_array ) {
  17.     print "@row\n";
  18. }
  19.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Observa que trasladamos la $query al execute(). MySQL se encargará de "escapar" los caracteres peligrosos que el usuario ingresara en la entrada.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Perl Mysql

Notapor PkoHimself » 2012-05-13 14:29 @645

En efecto: era la línea de escape la que hacía que mi código no funcionara.

¡ Muchas gracias por responder tan pronto ! :D

Hacía horas que buscaba una solución y no la encontraba :lol:
PkoHimself
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-05-13 13:58 @624


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 18 invitados