• Publicidad

Conexión base de datos

¿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 base de datos

Notapor silviaeaguilar » 2014-12-03 15:01 @667

Hola, quiero hacer un script que se conecte a una base de datos MySQL y realice algunas operaciones, pero quiero poner los datos de conexión en otro archivo al que acceda mi script.

¿Cómo puedo realizar esto?
silviaeaguilar
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2014-12-03 14:53 @662

Publicidad

Re: Conexión base de datos

Notapor explorer » 2014-12-03 16:52 @744

Bienvenida a los foros de Perl en Español, silviaeaguilar.

Yo tengo hecho algo parecido. Cuando interactuas con MySQL desde la línea de comandos, busca un archivo ~/.my.cnf donde se supone que hay algunas opciones por defecto para esa sesión interactiva. Este archivo tiene este aspecto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using ini Syntax Highlighting
  1. # Automatically generated for Debian scripts. DO NOT TOUCH!
  2. [client]
  3. host     = localhost
  4. user     = debian-sys-maint
  5. password = gq3nzsd9uyerb4LO6v5
  6. socket   = /var/run/mysqld/mysqld.sock
  7. [mysql_upgrade]
  8. host     = localhost
  9. user     = debian-sys-maint
  10. password = gq3nzsd9uyerb4LO6v5
  11. socket   = /var/run/mysqld/mysqld.sock
  12. basedir  = /usr
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Como pone al principio, el archivo lo generó Debian en el momento de la instalación del MySQL. Ahí están indicados los datos mínimos de conexión para cuando Debian necesite acceder a la base de datos, para realizar alguna tarea de mantenimiento.

El caso es que el usuario debian-sys-maint tiene los permisos necesarios para lo que yo quiero (insertar usuarios virtuales o realizar una simple consulta), así que puedo aprovechar esa misma información en el programa que hace esas consultas, como información de inicio de sesión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #
  3. # Saca la lista de usuarios virtuales de la tabla system, para un dominio indicado
  4. #
  5. use common::sense;
  6. use Config::IniFiles;
  7. use DBI;
  8.  
  9. my $dominio = shift or die "Uso: $0 <nombre de dominio>\n";
  10. my $config  = Config::IniFiles->new(-file => '/root/.my.cnf') or die "ERROR: el archivo no tiene formato .ini\n";
  11. my $userdb  = $config->val('client', 'user');
  12. my $passdb  = $config->val('client', 'password');
  13.  
  14. my $dbh = DBI->connect('DBI:mysql:database=system', $userdb, $passdb, { RaiseError => 1, AutoCommit => 0 });
  15.  
  16. for my $tabla (qw(user alias catchall)) {
  17.  
  18.     #my($cantidad) = $dbh->selectrow_array("SELECT COUNT(*) FROM $tabla WHERE `domain` = ?", {}, $dominio);
  19.     #say "$tabla: $cantidad";
  20.  
  21.     say $tabla;
  22.  
  23.     my $sth = $dbh->prepare("SELECT * FROM $tabla WHERE `domain` = ?");
  24.     $sth->execute($dominio);
  25.  
  26.     my $contador = 0;
  27.  
  28.     while (my @usuario = $sth->fetchrow_array) {
  29.         say "\t@usuario";
  30.         $contador++;
  31.     }
  32.     say "\tTotal: $contador" if $contador;
  33. }
  34.  
  35. $dbh->disconnect();
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Como el archivo my.conf sigue el formato de un archivo .ini, uso el módulo Config::IniFiles. En la línea 10 le paso al módulo el nombre del archivo que quiero que analice, y en las líneas 11 y 12 sacamos los datos que queremos: el nombre de usuario y contraseña, que usaremos en la línea 14 para hacer la conexión.

Se puede hacer de más formas, claro.
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


Volver a Básico

¿Quién está conectado?

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

cron