Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Conectarse a la base de datos

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Mensaje Mie May 09, 2007 4:43 am
chelusan
Perlero Nuevo
Perlero Nuevo
Registrado: 09 May 2007
Mensajes: 7
Conectarse a la base de datos Responder citando

Tengo que resolver algo que no actualiza bien en la base de datos. Es la primera vez que uso Perl. El archivo conectDB tiene como 3 formas de conectarse. Esto es lo que pone en el archivo

Perl:
#!/usr/bin/perl -w
package ConectarDB;
use strict;
use DBI;

# variables a editar
my $db_user = "xxxxxx";
my $db_pass = "1234";
my $host_name = "xxxxx";
my $db_name = "1234";
my $db_name2 = "1234";
my $db_name3 = "xxxxxx";

my $q_string = "DBI:mysql:host=$host_name;database=$db_name";
my $q_string2 = "DBI:mysql:host=$host_name;database=$db_name2";
my $q_string3 = "DBI:mysql:host=$host_name;database=$db_name3";

sub connect{
return (DBI->connect ($q_string, $db_user, $db_pass,
{PrintError => 0, RaiseError => 1}));
}

sub connect2{
return (DBI->connect ($q_string2, $db_user, $db_pass,
{PrintError => 0, RaiseError => 1}));
}

sub connect3{
return (DBI->connect ($q_string3, $db_user, $db_pass,
{PrintError => 0, RaiseError => 1}));
}

1;


Más adelante se accede a la base de datos con el connect. Se actualiza un campo que sí funciona. Luego se conecta mediante connect2 y da fallos al modificar unos campos. ¿No es necesario desconectar y luego volver a conectar?, porque en el fichero éste no cierra la conexión hasta el final.

No tengo mucha idea de esto, tenerme paciencia.

gracias

Ultima edición por chelusan el Lun May 14, 2007 5:37 am, editado 1 vez
Mensaje Mie May 09, 2007 5:24 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 691
Ubicación: Buenos Aires
Responder citando

Pero lo puedes desconectar vos personalmente, no necesitas el package para desconectarlo; seguramente te conectas con
Perl:
$mivar = $package->conect2();

puedes hacer
Perl:
$mivar->disconnect();

ya que el connect te crea un objeto DBI en la variable que vos definas y en esa variable puedes llamar a la función disconnect de DBI.

Espero que te sirva.

Saludos
Mensaje Mie May 09, 2007 5:39 am
chelusan
Perlero Nuevo
Perlero Nuevo
Registrado: 09 May 2007
Mensajes: 7
Responder citando

Pero no me explicas porqué al poner

Perl:
$dbh2 = ConectarDB->connect2();
$sth2 = $dbh->prepare('UPDATE $var SET c1=? WHERE c2=? AND c3=?');
$sth2->execute($v1,$v2,$v3);


no me actualiza la base de datos.

Luego todo lo cierro bien

Ultima edición por chelusan el Lun May 14, 2007 5:39 am, editado 1 vez
Mensaje Mie May 09, 2007 9:25 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 3823
Ubicación: Valladolid, España
Responder citando

Las funciones de base de datos suelen devolver los errores en la variable $DBI::errstr, por lo que es posible saber porqué han fallado. Y la base de datos también se le puede indicar que genere un log de actividad.

El número de conexiones abiertas puede ser muy alto, pero depende del sistema operativo. La cuestión es que cada conexión se almacene en su variable escalar correspondiente.

Por ejemplo, en $dbh2 guardas una conexión a una base de datos. Mientras no la cierres, podrás preguntar y acceder a esa base de datos.
Mensaje Jue May 10, 2007 7:52 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 691
Ubicación: Buenos Aires
Responder citando

Solo un detalle, ¿es correcto que el prepare de ese código lo hagas a dbh y no a dbh2?

Saludos
Mensaje Jue May 10, 2007 8:16 am
chelusan
Perlero Nuevo
Perlero Nuevo
Registrado: 09 May 2007
Mensajes: 7
Responder citando

si, cambiando eso tampoco me funciona
Mensaje Sab May 12, 2007 2:52 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 3823
Ubicación: Valladolid, España
Responder citando

Vaya... no me he dado cuenta del error hasta que lo he visto en el otro foro: estás usando comilla simple dentro del prepare. Ha de ser doble para que el valor de $distribuidor aparezca dentro de la sentencia sql, no '$distribuidor' de forma literal.
Mensaje Lun May 14, 2007 5:41 am
chelusan
Perlero Nuevo
Perlero Nuevo
Registrado: 09 May 2007
Mensajes: 7
Responder citando

gracias explorer, era justo por eso
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group