• Publicidad

Conexión 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.

Conexión Perl MySQL

Notapor tatti_kek » 2010-11-24 13:09 @589

Hola, estoy tratando de conectar Perl y MySQL con el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. package mi_db;
  4.  
  5. use strict;
  6. use DBI;
  7.  
  8. my %fields = (
  9. HOST => "localhost",
  10. USER => "root",
  11. PASS => "",
  12. DBNAME => "Prueba",
  13. dbh => '',
  14. );
  15.  
  16. sub connect {
  17. my $proto = shift;
  18. my $class = ref($proto) or $proto;
  19. my $self = {
  20. %fields,
  21. };
  22. bless ($self, $class);
  23. $self->{'dbh'} = DBI->connect("DBI:mysqlself->{DBNAME}self->{HOST}", $self->{USER}, $self->{PASS})
  24. or die "Couldn't connect to database: " . DBI->errstr;
  25. return $self->{'dbh'};
  26. }
  27. $dbh_ = mi_db::connect();
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Cuando lo compilo sale el siguiente error:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Global symbol "$dbh_" requires explicit package name at ./conexion_perl_mysql.cgi line 27.
Execution of ./conexion_perl_mysql.cgi aborted due to compilation errors.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Si quito la línea 'strict', me sale este otro:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Can't connect to data source 'DBI:mysqlself->{DBNAME}self->{HOST}' because I can't work out what driver to use (it doesn't seem to contain a 'dbi:driver:' prefix and the DBI_DRIVER env var is not set) at ./conexion_perl_mysql.cgi line 23
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Agradecería montones si pudieran ayudar :)
tatti_kek
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-11-24 12:57 @581

Publicidad

Re: Conexión Perl MySQL

Notapor explorer » 2010-11-24 14:28 @644

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

El problema que tienes es que has copiado mal el código que quieres usar.

El 'strict' es una opción de programación, por el cual el programador se obliga a sí mismo a programar de forma 'estricta'. Eso quiere decir, por ejemplo, que todas las variables que vayamos a usar deben estar declaradas en algún sitio, antes de poder ser usadas. Es algo muy bueno porque así Perl nos avisará de fallos en la escritura del código que hayamos cometido.

El primer error quiere decir que Perl ha encontrado una variable, $dbh_, que no ha sido declarada antes. Lo podrías resolver, según veo, poniendo un my delante, igual a las variables que hay en las líneas 17 a 19. O quitando el 'strict', pero es algo no recomendable si estás aprendiendo Perl.

El segundo error te está diciendo que la línea 23, la del connect(), está mal escrita. La has copiado mal de donde la has sacado. Falta algo entre {DBNAME} y self.
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: Conexión Perl MySQL

Notapor tatti_kek » 2010-11-24 15:51 @702

Ya corregí el código y quedó de esta manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. package mi_db;
  4.  
  5. use strict;
  6. use DBI;
  7.  
  8. my %fields = (
  9. HOST => "localhost",
  10. USER => "root",
  11. PASS => "",
  12. DBNAME => "Prueba",
  13. dbh => '',
  14. );
  15.  
  16. sub connect {
  17. my $proto = shift;
  18. my $class = ref($proto) or $proto;
  19. my $self = {
  20. %fields,
  21. };
  22. bless ($self, $class);
  23. $self->{'dbh'} = DBI->connect("DBI:mysql::$self->{DBNAME}, $self->{HOST}", $self->{USER}, $self->{PASS})
  24. or die "Couldn't connect to database: " . DBI->errstr;
  25. return $self->{'dbh'};
  26. }
  27. my $dbh = mi_db::connect();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¡Je! Pero el error persiste en la línea del connect()
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
DBI connect(':Prueba, localhost','root',...) failed: Unknown MySQL server host 'Prueba, localhost' (1) at ./mi_db.cgi line 23
Couldn't connect to database: Unknown MySQL server host 'Prueba, localhost' (1) at ./mi_db.cgi line 23.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
tatti_kek
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-11-24 12:57 @581

Re: Conexión Perl MySQL

Notapor explorer » 2010-11-24 15:56 @705

No, el error es distinto: te está diciendo que sobra un ':' en la línea 23.
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: Conexión Perl MySQL

Notapor tatti_kek » 2010-11-24 16:19 @721

oki, listo, lo quité y quedó así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. package mi_db;
  4.  
  5. use strict;
  6. use DBI;
  7.  
  8. my %fields = (
  9. HOST => "localhost",
  10. USER => "root",
  11. PASS => "",
  12. DBNAME => "Prueba",
  13. dbh => '',
  14. );
  15.  
  16. sub connect {
  17. my $proto = shift;
  18. my $class = ref($proto) or $proto;
  19. my $self = {
  20. %fields,
  21. };
  22. bless ($self, $class);
  23. $self->{'dbh'} = DBI->connect("DBI:mysql: $self->{DBNAME}, $self->{HOST}", $self->{USER}, $self->{PASS})
  24. or die "Couldn't connect to database: " . DBI->errstr;
  25. return $self->{'dbh'};
  26. }
  27. my $dbh = mi_db::connect();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora otro error :S
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
DBI connect(' Prueba, localhost','root',...) failed: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) at ./mi_db.cgi line 23
Couldn't connect to database: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) at ./mi_db.cgi line 23.
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
tatti_kek
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-11-24 12:57 @581

Re: Conexión Perl MySQL

Notapor explorer » 2010-11-24 16:32 @730

No tienes por qué reenviar tu programa cada vez que hagas un cambio.

Cada mensaje tiene un botón de Edición, por lo que puedes reeditar tus propios mensajes, cambiar el código, y luego enviar un nuevo mensaje con los cambios o errores que aparezcan.

Las líneas 23 y 24 se deberían escribir así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $self->{'dbh'}
  2.     = DBI->connect(
  3.         "DBI:mysql:database=$self->{DBNAME};host=$self->{HOST}",
  4.         $self->{USER}, $self->{PASS},
  5.     )
  6.     or die "Couldn't connect to database: " . DBI->errstr
  7.     ;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Los únicos cambios que he hecho:
* Las líneas 23 y 24 originales separarlas en varias, para que queden más claras.
* Había un espacio en blanco delante del nombre de la base de datos.
* Según la documentación de DBD::mysql, hay que separar los campos principales con ';' y poner database= y host=.
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: Conexión Perl MySQL

Notapor tatti_kek » 2010-11-25 11:52 @536

Gracias por la ayuda con el código ;)

Encontré que el error
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
 Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) at ./mi_db.cgi line 23.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

es un error que lo que implica es que ese archivo, mysqld.sock, no lo encuentra y esto es debido a que el archivo se crea cuando se inicia mysql, y todo sucedió porque estaba usando el MySQL del LAMP y no el que viene en Linux.

Y cuando ejecutaba el programa se direccionaba a buscar el archivo mysqld.sock en el MySQL de Linux y no el del LAMP.

Así que lo que hice fue redireccionar la ruta de ese archivo en /etc/mysql/my.cnf.


Y listo, ya me funciona :D
tatti_kek
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-11-24 12:57 @581


Volver a Básico

¿Quién está conectado?

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